/ / Carica l'indirizzo di un simbolo (nasm, OS X a 64 bit) - macos, x86-64, nasm

Carica l'indirizzo di un simbolo (nasm, OS X a 64 bit) - macos, x86-64, nas

Ho alcuni assembly che devono caricare un simbolo C in OS X (x86-64). Con x86, il modo in cui lo fai è:

mov rax, some_symbol_name

Tuttavia, con x86-64, questo provoca un avviso di collegamento:

ld: warning: PIE disabilitato. Indirizzamento assoluto (forse -mdynamic-no-pic) non consentito nel codice firmato PIE, ma usato in _main da Test2.o.
Per correggere questo avviso, non compilare -mdynamic-no-pic o link con -Wl, -no_pie

Nota: so cosa è PIE e non voglio disabilitarlo Ecco alcuni dei miei altri tentativi di caricare l'indirizzo del simbolo in un registro:

movq rax, some_symbol_name          ; Link warning
lea rax, [rel some_symbol_name]     ; No link warning, but doesn"t always get correct address

Sono davvero incappato in questo (apparentemente) semplice problema. Ho visto lo smontaggio del GAS e sembra che stia facendo qualcosa sulla falsariga del lea sopra, ma non posso ottenere NASM per generare il codice giusto.

EDIT: per riferimento, questo è il codice assembly generato da GAS:

leaq    some_symbol_name(%rip), %rax

risposte:

3 per risposta № 1

Si desidera forzare il NASM a utilizzare l'indirizzamento relativo RIP. Fai uno di:

lea rax, [rel some_symbol_name]

o:

default rel
lea rax, [some_symbol_name]

Se questo non funziona, inserisci il codice macchina generato da NASM e GAS.