我在.s文件中有以下代码:
pushq $afterjmp
nop
afterjmp:
movl %eax, %edx
它的目标文件包含以下内容:
20: 68 00 00 00 00 pushq $0x0
25: 90 nop
0000000000000026 <afterjmp>:
26: 89 c2 mov %eax,%edx
连接后,它变成了:
400572: 68 78 05 40 00 pushq $0x400578
400577: 90 nop
400578: 89 c2 mov %eax,%edx
在可执行文件中,如何将对象文件的第20个字节处的参数0x0
转换为最终执行文件中的0x400578
?
对象文件的哪个部分包含这些信息?
objdump -Dr filename.o
,您可以看到重新定位将发生在哪里。00 00 00 00是一个占位符,最终将由链接器(在此情况下)填充。 - Michael Petch