- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读了男人page 。它说的是
在 ELF header 中:
e_phoff - 该成员保存程序头表的文件偏移量(以字节为单位)。
e_shoff - 该成员保存节头表的文件偏移量(以字节为单位)。
在程序标题中
p_offset 该成员保存距文件开头的偏移量 段的第一个字节所在的位置。
在节标题中
sh_offset 该成员的值保存从文件开头到该节中第一个字节的字节偏移量
我很困惑。在我看来,这意味着在 Elf header 中我可以看到所有程序和节 header 的偏移量。在程序头中,我可以看到文件中具体段的偏移量。在节标题中,我可以看到文件中具体节的偏移量。但事实并非如此。我发现了简单的 Sprite 解析,我已经看到了这个结果
segment offset: 52
section offset: 6032
Program Entry point: 0x8048420
Section header list:
.interp: 0x8048154
offset: 340
.note.ABI-tag: 0x8048168
offset: 360
.note.gnu.build-id: 0x8048188
offset: 392
.gnu.hash: 0x80481ac
offset: 428
.dynsym: 0x80481e8
offset: 488
.dynstr: 0x80482b8
offset: 696
.gnu.version: 0x8048342
offset: 834
.gnu.version_r: 0x804835c
offset: 860
.rel.dyn: 0x804837c
offset: 892
.rel.plt: 0x8048394
offset: 916
.init: 0x80483ac
offset: 940
.plt: 0x80483d0
offset: 976
.plt.got: 0x8048410
offset: 1040
.text: 0x8048420
offset: 1056
.fini: 0x8048604
offset: 1540
.rodata: 0x8048618
offset: 1560
.eh_frame_hdr: 0x8048628
offset: 1576
.eh_frame: 0x8048664
offset: 1636
.init_array: 0x8049efc
offset: 3836
.fini_array: 0x8049f00
offset: 3840
.dynamic: 0x8049f04
offset: 3844
.got: 0x8049ff4
offset: 4084
.got.plt: 0x804a000
offset: 4096
.data: 0x804a018
offset: 4120
.bss: 0x804a020
offset: 4128
.comment: 0x0
offset: 4128
.symtab: 0x0
offset: 4172
.strtab: 0x0
offset: 5244
.shstrtab: 0x0
offset: 5768
Program header list
Phdr segment: 0x8048034
offset: 52
Interpreter: /lib/ld-linux.so.2
offset: 340
Text segment: 0x8048000
offset: 0
Data segment: 0x8049efc
offset: 3836
Dynamic segment: 0x8049f04
offset: 3844
Note segment: 0x8048168
offset: 360
PT_GNU_EH_FRAME: 0x8048628
offset: 1576
PT_GNU_STACK: 0x0
offset: 0
PT_GNU_RELRO: 0x8049efc
offset: 3836
正如您所看到的,Elf 偏移量的节偏移量 = 6032,但所有节偏移量都小于 Elf 偏移量。实际上这个程序中的所有部分都有像 6032 + (n * sizeof(Elf32_Shdr)) 这样的偏移量。在这种情况下,我无法理解节标题中的偏移量是什么意思?我认为,它是过程镜像中的偏移量,但手册页正在讨论文件内的偏移量。关于程序头中的偏移量的同样问题。请澄清节头偏移和程序头偏移的含义。
解析器太大,所以我没有附加它。但如果有人需要,我就会做
最佳答案
Actually all sections in this program have offset like 6032 + (n * sizeof(Elf32_Shdr)).
不,并非所有部分都有此偏移量,但节标题表格的所有部分条目都有此偏移量。
您看到的是,表格的偏移量比其条目中定义的部分的偏移量更高。
在您的示例中:
在文件的偏移量 1056 处开始“.text”部分。
在文件的偏移量 6032 处开始节头表。它的第 14 个条目(位于 6032 + 13 * sizeof(Elf32_Shdr))定义了“.text”部分,并将其偏移量指定为 1056。
关于无法理解程序头和节头中的偏移量成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57663121/
readelf -l/bin/bash 给我这个: Program Headers: Type Offset VirtAddr Phy
我是一名优秀的程序员,十分优秀!