assembler GNU: ottenere l'indirizzo di etichetta / variabile [INTEL SYNTAX]
-
19-09-2019 - |
Domanda
Ho un codice come questo:
.bss
woof: .long 0
.text
bleh:
...some op codes here.
Ora vorrei spostare l'indirizzo di Woof in eax. Qual è il intel sintassi il codice qui per fare quello? Lo stesso vale con lo spostamento di indirizzo bleh in, diciamo, EBX.
Il vostro aiuto è molto apprezzato!
Soluzione
La sezione BSS non può avere oggetti reali in esso. Alcuni assemblatori possono ancora permettono di passare alla sezione .bss, ma tutto si può fare c'è dire qualcosa del tipo: x: . = . + 4
.
Nella maggior parte dei assemblatori questi giorni e in particolare in GNU per Intel, non c'è più una direttiva .bss
, quindi si passa temporaneamente BSS e creare il simbolo bss in un colpo solo con qualcosa di simile: .comm sym,size,alignment
. Questo è il motivo per cui si sta presumibilmente ottenendo un errore " direttiva BSS non riconosciuto " o qualcosa del genere.
E poi si può ottenere l'indirizzo sia con:
lea woof, %eax
o
movl $woof, %eax
Aggiornamento: AHA, la sintassi Intel, non è architettura Intel. OK:
.intel_syntax noprefix
lea esi,fun
lea esi,[fun]
mov eax,OFFSET FLAT:fun
.att_syntax
lea fun, %eax
mov $fun, %eax
.data
fun: .long 0x123
Tutte le forme lea
dovrebbero generare lo stesso codice.