ELF Basic Information
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
рдпрд╣ рд▓реЛрдбрд░ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ ELF рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдХреИрд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдП:
The previous program has 9 program headers, then, the segment mapping indicates in which program header (from 00 to 08) each section is located.
Contains the program header tables and metadata itself.
Indicates the path of the loader to use to load the binary into memory.
These headers are used to indicate how to load a binary into memory. Each LOAD header indicates a region of memory (size, permissions and alignment) and indicates the bytes of the ELF binary to copy in there.
For example, the second one has a size of 0x1190, should be located at 0x1fc48 with permissions read and write and will be filled with 0x528 from the offset 0xfc48 (it doesn't fill all the reserved space). This memory will contain the sections .init_array .fini_array .dynamic .got .data .bss
.
This header helps to link programs to their library dependencies and apply relocations. Check the .dynamic
section.
This stores vendor metadata information about the binary.
Defines the location of the stack unwind tables, used by debuggers and C++ exception handling-runtime functions.
Contains the configuration of the stack execution prevention defense. If enabled, the binary won't be able to execute code from the stack.
Indicates the RELRO (Relocation Read-Only) configuration of the binary. This protection will mark as read-only certain sections of the memory (like the GOT
or the init
and fini
tables) after the program has loaded and before it begins running.
In the previous example it's copying 0x3b8 bytes to 0x1fc48 as read-only affecting the sections .init_array .fini_array .dynamic .got .data .bss
.
Note that RELRO can be partial or full, the partial version do not protect the section .plt.got
, which is used for lazy binding and needs this memory space to have write permissions to write the address of the libraries the first time their location is searched.
Defines a table of TLS entries, which stores info about thread-local variables.
Section headers gives a more detailed view of the ELF binary
It also indicates the location, offset, permissions but also the data рдХрд╛ рдкреНрд░рдХрд╛рд░ it section has.
String table: рдпрд╣ ELF рдлрд╝рд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирд╣реАрдВ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рдореЗрдВ рд╕реЗрдХреНрд╢рди рдирд╛рдо рдЬреИрд╕реЗ .text
рдпрд╛ .data
рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдФрд░ рдпрджрд┐ .text
рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдЯреЗрдмрд▓ рдореЗрдВ рдСрдлрд╕реЗрдЯ 45 рдкрд░ рд╣реИ, рддреЛ рдпрд╣ name рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ 45 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯреЗрдмрд▓ рдХрд╛ рд╕реНрдерд╛рди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, ELF рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯреЗрдмрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрддрд╛ рд╣реИред
Symbol table: рдпрд╣ рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдирд╛рдо (рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдЯреЗрдмрд▓ рдореЗрдВ рдСрдлрд╕реЗрдЯ), рдкрддрд╛, рдЖрдХрд╛рд░ рдФрд░ рдкреНрд░рддреАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдореЗрдЯрд╛рдбреЗрдЯрд╛ред
.text
: рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ред
.data
: рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдорд╛рди рдХреЗ рд╕рд╛рде рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ред
.bss
: рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдЬреЛ рдЕрдирд┐рдпреЛрдЬрд┐рдд рдЫреЛрдбрд╝ рджрд┐рдП рдЧрдП рд╣реИрдВ (рдпрд╛ рд╢реВрдиреНрдп рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ)ред рдпрд╣рд╛рдБ рдХреЗ рдЪрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢реВрдиреНрдп рдкрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдмрд╛рдЗрдирд░реА рдореЗрдВ рдмреЗрдХрд╛рд░ рд╢реВрдиреНрдп рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛рддрд╛ рд╣реИред
.rodata
: рд╕реНрдерд╛рдпреА рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ (рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЕрдиреБрднрд╛рдЧ)ред
.tdata
рдФрд░ .tbss
: рдЬреИрд╕реЗ .data рдФрд░ .bss рдЬрдм рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (__thread_local
C++ рдореЗрдВ рдпрд╛ __thread
C рдореЗрдВ)ред
.dynamic
: рдиреАрдЪреЗ рджреЗрдЦреЗрдВред
Symbols рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдирд╛рдорд┐рдд рд╕реНрдерд╛рди рд╣реИ рдЬреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди, рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ, рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рдЪрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ...
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддреАрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
рдирд╛рдо
рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ (рдХрдордЬреЛрд░, рд╕реНрдерд╛рдиреАрдп рдпрд╛ рд╡реИрд╢реНрд╡рд┐рдХ): рдПрдХ рд╕реНрдерд╛рдиреАрдп рдкреНрд░рддреАрдХ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рд╣реА рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рдкреНрд░рддреАрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд╣рд░ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рдХрдордЬреЛрд░ рд╡рд╕реНрддреБ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рджреНрд╡рд╛рд░рд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рдХрд╛рд░: NOTYPE (рдХреЛрдИ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ), OBJECT (рд╡реИрд╢реНрд╡рд┐рдХ рдбреЗрдЯрд╛ рд╡реЗрд░рд┐рдПрдмрд▓), FUNC (рдлрд╝рдВрдХреНрд╢рди), SECTION (рд╕реЗрдХреНрд╢рди), FILE (рдбреАрдмрдЧрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд-рдХреЛрдб рдлрд╝рд╛рдЗрд▓), TLS (рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рд╡реЗрд░рд┐рдПрдмрд▓), GNU_IFUNC (рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдлрд╝рдВрдХреНрд╢рди)
рд╕реЗрдХреНрд╢рди рдЕрдиреБрдХреНрд░рдорд╛рдВрдХ рдЬрд╣рд╛рдБ рдпрд╣ рд╕реНрдерд┐рдд рд╣реИ
рдорд╛рди (рд╕реНрдореГрддрд┐ рдореЗрдВ рдкрддрд╛)
рдЖрдХрд╛рд░
The NEEDED directory indicates that the program рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ. The NEEDED directory completes once the shared рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ.
The loader also must relocate dependencies after having loaded them. These relocations are indicated in the relocation table in formats REL or RELA and the number of relocations is given in the dynamic sections RELSZ or RELASZ.
рдпрджрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рдЕрд▓рдЧ рд╕реНрдерд╛рди рдкрд░ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдкрд╕рдВрджреАрджрд╛ рдкрддреЗ (рдЖрдорддреМрд░ рдкрд░ 0x400000) рд╕реЗ рднрд┐рдиреНрди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИ рдпрд╛ ASLR рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░рдг рд╕реЗ, рдПрдХ рд╕реНрдерд┐рд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рд╕рд╣реА рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреЗ рдорд╛рдиреЛрдВ рдиреЗ рдмрд╛рдЗрдирд░реА рдХреЗ рдкрд╕рдВрджреАрджрд╛ рдкрддреЗ рдкрд░ рд▓реЛрдб рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдереАред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, R_AARCH64_RELATIV
рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд┐рд╕реА рднреА рдЕрдиреБрднрд╛рдЧ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрди рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдкрддреЗ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреБрдирд░реНрд╕реНрдерд╛рдкрди рдПрдХ рдмрд╛рд╣рд░реА рдкреНрд░рддреАрдХ (рдЬреИрд╕реЗ рдХрд┐рд╕реА рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди) рдХреЛ рднреА рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕реЗ рдХрд┐ libC рд╕реЗ malloc рдлрд╝рдВрдХреНрд╢рдиред рдлрд┐рд░, рд▓реЛрдбрд░ рдЬрдм libC рдХреЛ рдПрдХ рдкрддреЗ рдкрд░ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ malloc рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛рдБ рд▓реЛрдб рд╣реИ, рдпрд╣ рдкрддрд╛ GOT (Global Offset Table) рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ (рдЬреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ) рдЬрд╣рд╛рдБ malloc рдХрд╛ рдкрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
PLT рдЕрдиреБрднрд╛рдЧ рдЖрд▓рд╕реА рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕реНрдерд╛рди рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рддреЛ рдЬрдм рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо malloc рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ PLT рдореЗрдВ malloc
рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдерд╛рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ (malloc@plt
)ред рдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рдЗрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ malloc
рдХрд╛ рдкрддрд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм malloc
рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рдЙрд╕ рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ PLT рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреЛ рдкрд╣рд▓рд╛ рдХреЛрдб рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ рд╣рдореЗрд╢рд╛ main
рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП C++ рдореЗрдВ рдпрджрд┐ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рддреЛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ main рдХреЗ рдЪрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐:
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ .data
рдпрд╛ .bss
рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реВрдЪрд┐рдпреЛрдВ __CTOR_LIST__
рдФрд░ __DTOR_LIST__
рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдФрд░ рд╡рд┐рдирд╛рд╢ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБрдПрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
C рдХреЛрдб рд╕реЗ GNU рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
From a compiler perspective, to execute these actions before and after the main
function is executed, it's possible to create a init
function and a fini
function which would be referenced in the dynamic section as INIT
and FIN
. and are placed in the init
and fini
sections of the ELF.
The other option, as mentioned, is to reference the lists __CTOR_LIST__
and __DTOR_LIST__
in the INIT_ARRAY
and FINI_ARRAY
entries in the dynamic section and the length of these are indicated by INIT_ARRAYSZ
and FINI_ARRAYSZ
. Each entry is a function pointer that will be called without arguments.
Moreover, it's also possible to have a PREINIT_ARRAY
with pointers that will be executed before the INIT_ARRAY
pointers.
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдерд┐рд░ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ .data
рдореЗрдВ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдирд┐рдпреЛрдЬрд┐рдд рд╡рд╛рд▓реЗ .bss
рдореЗрдВ рд╢реВрдиреНрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рднреА dependencies рдХреЛ initialized рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ dynamic linking рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
PREINIT_ARRAY
рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
INIT_ARRAY
рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдПрдХ INIT
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рддреЛ dlopen рдпрд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдпрджрд┐ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ, рддреЛ real entry point (main
function) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред
рд╡реЗ C++ рдореЗрдВ рдХреАрд╡рд░реНрдб __thread_local
рдпрд╛ GNU рдПрдХреНрд╕рдЯреЗрдВрд╢рди __thread
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдЗрд╕ рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╕реНрдерд╛рди рдмрдирд╛рдПрдЧрд╛ рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рдереНрд░реЗрдб рдЕрдкрдиреЗ рдЪрд░ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХреЗред
рдЬрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ ELF рдореЗрдВ .tdata
рдФрд░ .tbss
рдЕрдиреБрднрд╛рдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреЛ рдХрд┐ .data
(рдкреНрд░рд╛рд░рдВрднрд┐рдХ) рдФрд░ .bss
(рдЕрдирд┐рдпреЛрдЬрд┐рдд) рдХреЗ рд╕рдорд╛рди рд╣реИрдВ рд▓реЗрдХрд┐рди TLS рдХреЗ рд▓рд┐рдПред
рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ рдХрд╛ TLS рд╣реЗрдбрд░ рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реЛрдЧреА рдЬреЛ рдЖрдХрд╛рд░ рдФрд░ TLS рдСрдлрд╕реЗрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреА рд╣реИ, рдЬреЛ рдХрд┐ рдереНрд░реЗрдб рдХреЗ рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдСрдлрд╕реЗрдЯ рд╣реИред
__TLS_MODULE_BASE
рдПрдХ рдкреНрд░рддреАрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдереНрд░реЗрдб рд╕реНрдерд╛рдиреАрдп рднрдВрдбрд╛рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрддреЗ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдореЗрдореЛрд░реА рдХреЗ рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рднреА рдереНрд░реЗрдб-рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛ рд╣реЛрддреЗ рд╣реИрдВред