如何通过调试避免重要的指令重定位截断?

时间:2018-05-12 20:16:54

标签: assembly x86-64

我的x86-64汇编程序有一行减少,导致重定位截断错误:

movq %rdx,8(%rdi)

如果您将该行单独放在t.s中,它将使用命令

成功汇编
as -o t.o -g -al=t.lst t.s

请注意调试信息的-g选项。

在此之后,尝试使用此命令将其链接到可执行文件:

ld -o t t.o

导致这两条错误消息:

t.o:t.s:1:(.stab+0x14): relocation truncated to fit: R_X86_64_32 against `.text'
t.o:t.s:1:(.stab+0x20): relocation truncated to fit: R_X86_64_32 against `.text'

t.lst的重点是:

1 0000 48895708       movq %rdx,8(%rdi)
1      90909090
1      90909090
1      90909090

如果我将-g选项从汇编程序命令中删除,则不会出现链接器错误,因此问题可能出在调试器数据中,而不是输出文件的可执行部分。

这条指令在一个更大的程序中给我带来了麻烦,但正如你所看到的那样,它仍然是一个问题。

为什么我从此特定指令中获取重定位截断?链接器选项是否会生成有效且可调试的程序?

0 个答案:

没有答案