Acceda a la sección .data en Código independiente de posición
Estoy construyendo una biblioteca compartida con NASM. En esa biblioteca, en alguna función, necesito lo que llamaríamos unvariable estática en C. Básicamente, creo que hay algo de espacio en la sección .data:
SECTION .data
last_tok: dq 0 ; Define a QWORD
El problema surge cuando intentoacceso last_tok en mi funcion
yo leo elManual NASM: 8.2 Escritura de bibliotecas compartidas Linux / ELF que explica el problema y da la solución.
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
Puede funcionar con ELF32, pero con ELF64 obtengo el siguiente error:
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
¿Qué estoy haciendo mal?