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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage