Entry 1 has ELF64_R_TYPE == STT_FILE. ELF64_R_TYPE is continued inside of st_info.
  • 10 8: st_name = 01000000 = character 1 in the .strtab, which until the following \0 makes hello_world.asm
    This piece of information file may be used by the linker to decide on which segment sections go: e.g. in ld linker script we write:
    segment_name :
    {
        file(section)
    }
    to pick a section from a given file.
    Most of the time however, we will just dump all sections with a given name together with:
    segment_name :
    {
        *(section)
    }
  • 10 12: st_info = 04
    Bits 0-3 = ELF64_R_TYPE = Type = 4 = STT_FILE: the main purpose of this entry is to use st_name to indicate the name of the file which generated this object file.
    Bits 4-7 = ELF64_ST_BIND = Binding = 0 = STB_LOCAL. Required value for STT_FILE.
  • 10 13: st_shndx = Symbol Table Section header Index = f1ff = SHN_ABS. Required for STT_FILE.
  • 20 0: st_value = 8x 00: required for value for STT_FILE
  • 20 8: st_size = 8x 00: no allocated size
Now from the readelf, we interpret the others quickly.
There are two such entries, one pointing to .data and the other to .text (section indexes 1 and 2).
Num:    Value          Size Type    Bind   Vis      Ndx Name
  2: 0000000000000000     0 SECTION LOCAL  DEFAULT    1
  3: 0000000000000000     0 SECTION LOCAL  DEFAULT    2
TODO what is their purpose?
Then come the most important symbols:
Num:    Value          Size Type    Bind   Vis      Ndx Name
  4: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT    1 hello_world
  5: 000000000000000d     0 NOTYPE  LOCAL  DEFAULT  ABS hello_world_len
  6: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT    2 _start
hello_world string is in the .data section (index 1). It's value is 0: it points to the first byte of that section.
_start is marked with GLOBAL visibility since we wrote:
global _start
in NASM. This is necessary since it must be seen as the entry point. Unlike in C, by default NASM labels are local.
By default, NASM places a .symtab on the executable as well.
This is only used for debugging. Without the symbols, we are completely blind, and must reverse engineer everything.
You can strip it with objcopy, and the executable will still run. Such executables are called "stripped executables".
Besides sh_type == SHT_RELA, there also exists SHT_REL, which would have section name .text.rel (not present in this object file).
Those represent the same struct, but without the addend, e.g.:
typedef struct {
    Elf64_Addr  r_offset;
    Elf64_Xword r_info;
} Elf64_Rela;
The ELF standard says that in many cases the both can be used, and it is just a matter of convenience.
  • reconstruction/ecoli/flat/condition/nutrient/minimal.tsv contains the nutrients in a minimal environment in which the cell survives:
    "molecule id" "lower bound (units.mmol / units.g / units.h)" "upper bound (units.mmol / units.g / units.h)"
    "ADP[c]" 3.15 3.15
    "PI[c]" 3.15 3.15
    "PROTON[c]" 3.15 3.15
    "GLC[p]" NaN 20
    "OXYGEN-MOLECULE[p]" NaN NaN
    "AMMONIUM[c]" NaN NaN
    "PI[p]" NaN NaN
    "K+[p]" NaN NaN
    "SULFATE[p]" NaN NaN
    "FE+2[p]" NaN NaN
    "CA+2[p]" NaN NaN
    "CL-[p]" NaN NaN
    "CO+2[p]" NaN NaN
    "MG+2[p]" NaN NaN
    "MN+2[p]" NaN NaN
    "NI+2[p]" NaN NaN
    "ZN+2[p]" NaN NaN
    "WATER[p]" NaN NaN
    "CARBON-DIOXIDE[p]" NaN NaN
    "CPD0-1958[p]" NaN NaN
    "L-SELENOCYSTEINE[c]" NaN NaN
    "GLC-D-LACTONE[c]" NaN NaN
    "CYTOSINE[c]" NaN NaN
    If we compare that to reconstruction/ecoli/flat/condition/nutrient/minimal_plus_amino_acids.tsv, we see that it adds the 20 amino acids on top of the minimal condition:
    "L-ALPHA-ALANINE[p]" NaN NaN
    "ARG[p]" NaN NaN
    "ASN[p]" NaN NaN
    "L-ASPARTATE[p]" NaN NaN
    "CYS[p]" NaN NaN
    "GLT[p]" NaN NaN
    "GLN[p]" NaN NaN
    "GLY[p]" NaN NaN
    "HIS[p]" NaN NaN
    "ILE[p]" NaN NaN
    "LEU[p]" NaN NaN
    "LYS[p]" NaN NaN
    "MET[p]" NaN NaN
    "PHE[p]" NaN NaN
    "PRO[p]" NaN NaN
    "SER[p]" NaN NaN
    "THR[p]" NaN NaN
    "TRP[p]" NaN NaN
    "TYR[p]" NaN NaN
    "L-SELENOCYSTEINE[c]" NaN NaN
    "VAL[p]" NaN NaN
    so we guess that NaN in the upper mound likely means infinite.
    We can try to understand the less obvious ones:
    • ADP: TODO
    • PI: TODO
    • PROTON[c]: presumably a measure of pH
    • GLC[p]: glucose, this can be seen by comparing minimal.tsv with minimal_no_glucose.tsv
    • AMMONIUM: ammonium. This appears to be the primary source of nitrogen atoms for producing amino acids.
    • CYTOSINE[c]: hmmm, why is external cytosine needed? Weird.
  • reconstruction/ecoli/flat/reconstruction/ecoli/flat/condition/timeseries/ contains sequences of conditions for each time. For example:
    • reconstruction/ecoli/flat/reconstruction/ecoli/flat/condition/timeseries/000000_basal.tsv contains:
      "time (units.s)" "nutrients"
      0 "minimal"
      which means just using reconstruction/ecoli/flat/condition/nutrient/minimal.tsv until infinity. That is the default one used by runSim.py, as can be seen from ./out/manual/wildtype_000000/000000/generation_000000/000000/simOut/Environment/attributes/nutrientTimeSeriesLabel which contains just 000000_basal.
    • reconstruction/ecoli/flat/reconstruction/ecoli/flat/condition/timeseries/000001_cut_glucose.tsv is more interesting and contains:
      "time (units.s)" "nutrients"
      0 "minimal"
      1200 "minimal_no_glucose"
      so we see that this will shift the conditions half-way to a condition that will eventually kill the bacteria because it will run out of glucose and thus energy!
    Timeseries can be selected with --variant nutrientTimeSeries X Y, see also: run variants.
    We can use that variant with:
    VARIANT="condition" FIRST_VARIANT_INDEX=1 LAST_VARIANT_INDEX=1 python runscripts/manual/runSim.py
  • reconstruction/ecoli/flat/condition/condition_defs.tsv contains lines of form:
    "condition" "nutrients"                "genotype perturbations" "doubling time (units.min)" "active TFs"
    "basal"     "minimal"                  {}                       44.0                        []
    "no_oxygen" "minimal_minus_oxygen"     {}                       100.0                       []
    "with_aa"   "minimal_plus_amino_acids" {}                       25.0                        ["CPLX-125", "MONOMER0-162", "CPLX0-7671", "CPLX0-228", "MONOMER0-155"]
    • condition refers to entries in reconstruction/ecoli/flat/condition/condition_defs.tsv
    • nutrients refers to entries under reconstruction/ecoli/flat/condition/nutrient/, e.g. reconstruction/ecoli/flat/condition/nutrient/minimal.tsv or reconstruction/ecoli/flat/condition/nutrient/minimal_plus_amino_acids.tsv
    • genotype perturbations: there aren't any in the file, but this suggests that genotype modifications can also be incorporated here
    • doubling time: TODO experimental data? Because this should be a simulation output, right? Or do they cheat and fix doubling by time?
    • active TFs: this suggests that they are cheating transcription factors here, as those would ideally be functions of other more basic inputs

There are unlisted articles, also show them or only show them.