x86-64 汇编程序链接与 gcc 失败
x86-64 assembly program linking fails with gcc
From seyfarth's book:
segment .data
a dw 175
b dw 4097
segment .text
global main
main:
mov rax, [a] ; mov a (175)into rax
add rax, [b] ; add b to rax
xor rax, rax
ret
无法link使用 seyfarth 书中给出的命令:
yasm -P ebe.inc -Worphan-labels -f elf64 -g dwarf2 -l add1.lst add1.asm
gcc -g -o add1 add1.o
/usr/bin/ld: add1.o: relocation R_X86_64_32 against `.data' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
Makefile:20: recipe for target 'add1' failed
make: *** [add1] Error 1
如果我用 _start 替换 main,然后使用 yasm 替换 assemble,然后使用 ld 替换 link,它就可以工作。
Link 与 -no-pie
.
PIE 是一项相当新的安全功能,需要您编写与位置无关的代码。你的代码不是位置无关的,所以你的代码不能link。关闭该功能是初学者的最佳解决方案。或者,您也可以通过使用适当的寻址模式使您的代码与位置无关:
mov rax, [rel a]
add rax, [rel b]
From seyfarth's book:
segment .data
a dw 175
b dw 4097
segment .text
global main
main:
mov rax, [a] ; mov a (175)into rax
add rax, [b] ; add b to rax
xor rax, rax
ret
无法link使用 seyfarth 书中给出的命令:
yasm -P ebe.inc -Worphan-labels -f elf64 -g dwarf2 -l add1.lst add1.asm
gcc -g -o add1 add1.o
/usr/bin/ld: add1.o: relocation R_X86_64_32 against `.data' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
Makefile:20: recipe for target 'add1' failed
make: *** [add1] Error 1
如果我用 _start 替换 main,然后使用 yasm 替换 assemble,然后使用 ld 替换 link,它就可以工作。
Link 与 -no-pie
.
PIE 是一项相当新的安全功能,需要您编写与位置无关的代码。你的代码不是位置无关的,所以你的代码不能link。关闭该功能是初学者的最佳解决方案。或者,您也可以通过使用适当的寻址模式使您的代码与位置无关:
mov rax, [rel a]
add rax, [rel b]