【发布时间】:2017-04-29 19:40:32
【问题描述】:
我用-m32 -nostdlib将此程序编译成一个ELF可执行文件:
void _start() {}
当我执行readelf -l 时,我惊讶地发现 LOAD 段上的偏移量为 0x000000,因为这意味着可执行文件头将与文本段同时加载到内存中。于是我去GDB查了一下,确实是这样:
(gdb) b _start
Breakpoint 1 at 0x8048083
(gdb) r
Starting program: /home/tbodt/ish/build/a.out
Breakpoint 1, 0x08048083 in _start ()
(gdb) x/4c 0x08048000
0x8048000: 127 '\177' 69 'E' 76 'L' 70 'F'
为什么有用?
【问题讨论】:
-
也许动态链接器代码需要查看 ELF 标头。
-
这有什么奇怪的?
-
@JohnBollinger 我只是不确定为什么将标头放在内存中很有用,如果没有充分的理由让标头在那里,我希望偏移量为 0x83 并且入口点只是 0x8048000