gpt4 book ai didi

gcc - 与GCC组装会导致关于.data的奇怪的重定位错误

转载 作者:行者123 更新时间:2023-12-04 23:14:40 28 4
gpt4 key购买 nike

这是一个以前从未发生过的问题。我非常确信这可能是我的软件包 repo 的问题(我最近重新安装了Arch系统,而这才刚刚开始发生)。

我在x86_64中写了一个小的hello世界:

.data
str: .asciz "Test"

.text
.globl main
main:
sub $8, %rsp
mov $str, %rdi
call puts
add $8, %rsp
ret

然后,我尝试使用GCC进行组装和链接-就像我过去做过的很多次一样-简单地:

gcc test.s -o test



然后输出此错误:

/usr/bin/ld: /tmp/ccAKVV4D.o: relocation R_X86_64_32S against `.data' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: final link failed: Nonrepresentable section on output collect2: error: ld returned 1 exit status



这个错误对我来说从未发生过。我试图通过搜索相同的错误消息来解决此问题,但它涉及的内容非常具体,而我认为这是一个普遍的问题。我尝试过重新安装base-devel和整个GCC工具链。我不知道我还能做什么(请不要建议使用nasm,那是异端)。

我想认为我遗漏了一些明显的东西,但是很长时间以来我就一直使用GCC来满足我的组装需求。

最佳答案

解决该错误的方法是生成no-pie(与位置无关的可执行文件)可执行文件:

gcc -no-pie test.s -o test

此行为的原因如@ Ped7g所述:
Debian在64位模式下切换到PIC/PIE二进制文件,在您的情况下,GCC试图将您的对象链接为PIC,但是它将在 mov $str, %rdi中遇到绝对地址。

关于gcc - 与GCC组装会导致关于.data的奇怪的重定位错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46123505/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com