【发布时间】:2017-12-22 18:07:16
【问题描述】:
我在 .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到pushq如何在最终可执行文件中转换为0x400578?
目标文件的哪个部分包含此信息?
【问题讨论】:
-
目标文件(以及它包含的部分)不知道它将被放置在最终可执行文件中的什么位置。这是由链接器驱动的(默认情况下是内部链接器脚本)。如果您使用
objdump -Dr filename.o,您可以看到重定位的位置。 00 00 00 00 是一个占位符,最终将由链接器填充(在这种情况下) -
@MichaelPetch,谢谢,它有帮助。
标签: linux assembly x86 elf relocation