我正在编写一些汇编代码(英特尔),但我不明白为什么当我尝试创建共享库时这段代码不起作用:
BITS 64
SECTION .text
GLOBAL test
test:
push rbp
mov rbp, rsp
mov rax, 3
mov al, BYTE [rel array + rax]
pop rbp
ret
SECTION .data
array times 256 db 0
而如果您通过使用数字更改寄存器来修改带有“mov”的行,则它可以工作:
mov al, BYTE [rel array + 3]
我对 nasm 没有任何错误,但是当我尝试使用 ld 链接并创建共享库时:
重定位 R_X86_64_32S 对 `.data' 在制作共享对象时不能使用;使用 -fPIC 重新编译
我找到了“R_X86_64_32S”错误的答案:C++ 链接在实践中如何工作?
但是我不明白为什么我不能使用“rax”作为偏移量,而我可以使用数字。
有没有办法浏览思想数组?
这是我用来创建共享库的命令:
nasm -f elf64 test.s
ld -shared test.o -o test.so