Доступ к разделу .data в Независимом от позиции коде
Я создаю общую библиотеку с NASM. В этой библиотеке в какой-то функции мне нужно то, что мы бы назвалистатическая переменная в C. В принципе, я думаю, что это место в разделе .data:
SECTION .data
last_tok: dq 0 ; Define a QWORD
Проблема возникает, когда я пытаюсьдоступ last_tok в моей функции.
Я прочиталРуководство NASM: 8.2 Написание общих библиотек Linux / ELF который объясняет проблему и дает решение.
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
Что я делаю неправильно?