所以我想汇编这个非常简单的代码:
extern printf
Segment .data
string:
db "foo", 0
Segment .text
extern printf
global main
main:
push rbp
xor rax, rax
mov rdi, string
call printf
pop rbp
ret
但是我想将其设为PIE,所以我更改了
mov rdi,字符串
到
lea rdi,[rel + string]
但是这样做之后,我从ld / gcc收到以下错误:
不能将R_X86_64_PC32相对于符号“ printf@GLIBC_2.2.5”进行重定位 在制作PIE对象时使用;用-fPIC / usr / bin / ld重新编译: 最终链接失败:值不正确
我正在使用以下方法进行编译和组装: nasm -f elf64 bar.s -o bar.o; gcc -fPIC bar.o -o bar
为什么会出现此错误?使用-no-pie标志可以正常编译