Access .data Abschnitt in Position Independent Code
Ich erstelle eine gemeinsam genutzte Bibliothek mit NASM. In dieser Bibliothek brauche ich in irgendeiner Funktion das, was wir als @ bezeichnen würdestatic variable in C. Grundsätzlich denke ich, dass es etwas Platz in der .data-Sektion gibt:
SECTION .data
last_tok: dq 0 ; Define a QWORD
Das Problem entsteht, wenn ich versuche,Zugrif last_tok in meiner Funktion.
Ich lese dieNASM Manual: 8.2 Linux / ELF Shared Libraries schreiben Das erklärt das Problem und gibt die Lösung.
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
Es kann mit ELF32 funktionieren, aber mit ELF64 erhalte ich den folgenden Fehler:
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
Was mache ich falsch