Nou Generator de prompt AI — scrie prompturi mai bune pentru ChatGPT, Claude și Gemini →

Adresare Relativă la Pointerul de Instrucțiune: RIP-Relative Addressing în x86_64 în Assembly (x86_64)

Ghid complet pentru adresarea RIP-relative în x86_64: generarea de cod independent de poziție (PIC / PIE), directiva default rel în NASM și protecția împotriva adresării absolute.

Sintaxă
default rel; lea rdi, [mesaj] ; generează lea rdi, [rip + offset]

În arhitectura modernă x86_64 pe sisteme de operare cu protecție ASLR (Address Space Layout Randomization), toate binarele și bibliotecile dinamice sunt compilate ca PIE (Position Independent Executable) sau PIC (Position Independent Code).

Pentru a atinge această independență față de locația din memorie unde nucleul încarcă programul, procesorul folosește registrul RIP (Instruction Pointer) ca bază pentru calculul adresei variabilelor de date.

Adresare Absolută (Învechită) vs RIP-Relative Addressing (Modernă)
; Activăm modul relativ implicit pentru întregul fișier sursă NASM:
default rel

section .rodata
    titlu: db "Compilare PIE Sigură", 0

section .text
global obtine_adresa

obtine_adresa:
    ; MOD MODERN (RIP-Relative):
    ; Procesorul calculează adresa la rulare ca: RIP + diferență_octeți.
    ; Nu necesită relocări dinamice la pornirea programului!
    lea     rdi, [titlu]        ; Instrucțiunea generată în binar este: lea rdi, [rip + 0x1234]

    ; Fără 'default rel', ar trebui specificat explicit cuvântul cheie 'rel':
    ; lea   rdi, [rel titlu]

    ret
De ce este obligatoriu PIE în Linux și macOS? Fără adresare RIP-relative, linker-ul modern (ld / gcc) va refuza generarea executabilului cu eroarea: „relocation R_X86_64_32S against symbol can not be used when making a PIE object; recompile with -fPIE”.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Adresare Relativă la Pointerul de Instrucțiune: RIP-Relative Addressing în x86_64

Ai o nelămurire despre utilizarea comenzii Adresare Relativă la Pointerul de Instrucțiune: RIP-Relative Addressing în x86_64 sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.