Acesse a seção .data no Código de posição independente
Estou construindo uma biblioteca compartilhada com o NASM. Nessa biblioteca, em alguma função, eu preciso do que chamaríamos devariável estática em C. Basicamente, acho que há algum espaço na seção .data:
SECTION .data
last_tok: dq 0 ; Define a QWORD
O problema surge quando tentoAcesso last_tok na minha função.
Eu li oManual NASM: 8.2 Gravando bibliotecas compartilhadas Linux / ELF o que explica o problema e fornece a solução.
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
Pode funcionar com o ELF32, mas com o ELF64 recebo o seguinte erro:
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
O que estou fazendo errado?