基本上,我曾经objdump -D
反汇编一个目标文件和一个 ELF 文件。我看到两者之间的主要区别是。
我看到(各个段的)目标文件中的指令有一个以0开头的地址。因此, 的连续地址偏移某个值,可能取决于对应于该特定指令的操作码的长度。
Disassembly of section .text:
00000000 <main>:
0: 8d 4c 24 04 lea 0x4(%esp),%ecx
4: 83 e4 f0 and $0xfffffff0,%esp
7: ff 71 fc pushl -0x4(%ecx)
a: 55 push %ebp
另一方面,对于 ELF 罚款,我看到指令的32 位地址空间main
。另外,如果我在我的程序中打印地址。相当于我反汇编的ELF中的地址。
08048394 <main>:
8048394: 8d 4c 24 04 lea 0x4(%esp),%ecx
8048398: 83 e4 f0 and $0xfffffff0,%esp
804839b: ff 71 fc pushl -0x4(%ecx)
804839e: 55 push %ebp
这里的问题是。
- ELF 文件中的地址实际上指的是什么?
- 链接器如何计算它们?