12.5 Informations sur les binaires Elf

De UnixWiki
Aller à la navigation Aller à la recherche
 # readelf -a /bin/ls | more
 ELF Header:
 Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
 Class:                             ELF64
 Data:                              2's complement, little endian
 Version:                           1 (current)
 OS/ABI:                            UNIX - System V
 ABI Version:                       0
 Type:                              EXEC (Executable file)
 Machine:                           Advanced Micro Devices X86-64
 Version:                           0x1
 Entry point address:               0x4046d4
 Start of program headers:          64 (bytes into file)
 Start of section headers:          108648 (bytes into file)
 Flags:                             0x0
 Size of this header:               64 (bytes)
 Size of program headers:           56 (bytes)
 Number of program headers:         8
 Size of section headers:           64 (bytes)
 Number of section headers:         28
 Section header string table index: 27
 ...

Les sections importantes

 .ctors et .dtors Adresses mémoires des fonctions devant être appelés au début et fin de programme (propre à gcc).
 .text Code exécutable.
 .data Variables globales.
 .got Chaque entrée de cette section contient l'adresse absolue des différentes fonctions dynamique ou non.
 .plt La fonction qui aura été appelée dans le programme sera référencée dans cette section. Chaque entrée permettra entre autre de jumper sur l'adresse de .got contenant l'adresse absolue de la fonction appelée.

Afficher les symboles d'un binaire

 # nm sysinfo
 08049868 d _DYNAMIC
 0804993c d _GLOBAL_OFFSET_TABLE_
 080486ec R _IO_stdin_used
          w _Jv_RegisterClasses
 08049858 d __CTOR_END__
 08049854 d __CTOR_LIST__
 08049860 D __DTOR_END__
 0804996c D __dso_handle
          w __gmon_start__
 0804869a T __i686.get_pc_thunk.bx