最近在学习汇编语言,想运行64位的汇编代码文件。 但是当我尝试使用
gcc -o test1 test1.s
命令组装和链接我的文件时,我遇到了一个错误:
/usr/bin/ld: /tmp/ccdyRWWG.o: relocation R_X86_64_32S against `.data' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status
这是我写的代码。
.section ".rodata"
printFormat:
.asciz "%d\n"
### --------------------------------------------------------------------
.section ".data"
### --------------------------------------------------------------------
.section ".bss"
### --------------------------------------------------------------------
.section ".text"
.text
.globl main
.type main, @function
main:
movq $0x1111222233334444, %rax
pushq %rax
pushq $printFormat
call printf
addq $16, %rsp
movq $0, %rax
ret
如果我在主函数中删除
pushq $printFormat
,我可以汇编/链接文件,但是上面编写的代码出错。我该如何解决这个问题?