【发布时间】:2016-07-13 09:37:16
【问题描述】:
我正在使用 NASM 构建一个共享库。在那个库中,在某些函数中,我需要我们在 C 中称为 静态变量 的东西。基本上,我认为它是 .data 部分中的一些空间:
SECTION .data
last_tok: dq 0 ; Define a QWORD
当我尝试在我的函数中访问 last_tok 时出现问题。
我阅读了NASM Manual: 8.2 Writing Linux/ELF Shared Libraries,它解释了问题并给出了解决方案。
SECTION .data
last_tok: dq 0 ; Define a QWORD
SECTION .text
EXTERN _GLOBAL_OFFSET_TABLE_
GLOBAL strtok:function
strtok:
enter 0, 0
push rbx
call .get_GOT
.get_GOT:
pop rbx
add rbx, _GLOBAL_OFFSET_TABLE_ + $$ - .get_GOT wrt ..gotpc
mov [rbx + last_tok wrt ..gotoff], rdi ; Store the contents of RDI at last_tok
mov rbx, [rbp - 8]
leave
ret
它可能适用于 ELF32,但对于 ELF64,我收到以下错误:
nasm -f elf64 -o strtok.o strtok.s
strtok:15: error: ELF64 requires ..gotoff references to be qword
<builtin>: recipe for target 'strtok.o' failed
make: *** [strtok.o] Error 1
我做错了什么?
【问题讨论】:
标签: linux assembly nasm x86-64 elf