0
所以我想通过仔细了解一切是如何相关的,并且无法理解为什么符号表条目是它们的大小来了解ELF。ELF中的64位符号表条目的格式
当运行readelf -W -S tiny.o我得到:
Section Headers:
[Nr] Name Type Address Off Size ES Flg Lk Inf Al
[ 0] NULL 0000000000000000 000000 000000 00 0 0 0
[ 1] .bss NOBITS 0000000000000000 000200 000001 00 WA 0 0 4
[ 2] .text PROGBITS 0000000000000000 000200 00002a 00 AX 0 0 16
[ 3] .shstrtab STRTAB 0000000000000000 000230 000031 00 0 0 1
[ 4] .symtab SYMTAB 0000000000000000 000270 000090 18 5 5 4
[ 5] .strtab STRTAB 0000000000000000 000300 000015 00 0 0 1
[ 6] .rela.text RELA 0000000000000000 000320 000030 18 4 2 4
哪个示出了具有每个条目为0x18或24字节及(0x300-0x270)总大小或0×90赋予的符号表我们6项。
这什么readelf -W -s tiny.o说比赛:
Symbol table '.symtab' contains 6 entries:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 FILE LOCAL DEFAULT ABS tiny.asm
2: 0000000000000000 0 SECTION LOCAL DEFAULT 1
3: 0000000000000000 0 SECTION LOCAL DEFAULT 2
4: 0000000000000000 0 NOTYPE LOCAL DEFAULT 1 str
5: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 2 _start
所以很明显的24个字节大小是正确的,但作为this 32 bit spec描述下,将对应于一个32位的表项。
鉴于我是一个64位系统上的ELF文件是64位我希望进入是在this 64 bit spec描述下。
在观看文件的十六进制转储,我发现文件中的字段的布局似乎根据该64位模式为。
那么为什么ELF文件似乎尽管使用了64位布局并且是一个64位文件,却似乎使用了尺寸过小的符号表条目?
我在想这个名字和shdnx是8字节值,但现在我意识到规格中列出的尺寸是4和2。 – TheThirdOne