如何强制LD链接PIC汇编代码?

时间:2019-06-15 05:31:53

标签: assembly x86 x86-64 nasm ld

所以我想汇编这个非常简单的代码:

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标志可以正常编译

0 个答案:

没有答案