gnu assembler: získat adresu štítku / proměnné [INTEL SYNTAX]

hlasů
4

Mám kód, jako je tento:

.bss
woof: .long 0

.text
bleh:
...some op codes here.

Nyní bych chtěl posunout adresu útku do eax. Co je to Intel syntax tu pro to, že kód? Totéž platí i pro pohybující adresu Bleh se do, řekněme, EBX.

Vaše pomoc je velmi ocenil!

Položena 13/12/2009 v 20:12
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
7

Sekce BSS nemůže mít žádné skutečné objekty v něm. Některé montéři mohou stále umožňují přepínat do bss části, ale vše, co můžete udělat, je říci něco jako: x: . = . + 4.

Ve většině montéři v těchto dnech a to konkrétně v GNU pro Intel, tam už není .bsssměrnice, takže jej dočasně přepnout do BSS a vytvořit symbol BSS v jednom záběru s něčím jako: .comm sym,size,alignment. To je důvod, proč jsou podle všeho stále chybu „ Směrnice BSS neuznaných “ nebo něco podobného.

A pak se můžete dostat adresu buď:

lea woof, %eax

nebo

movl $woof, %eax

Aktualizace: aha, syntax intel, ne Intel Architecture. 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

Všechny leaformy by měly generovat stejný kód.

Odpovězeno 13/12/2009 v 20:48
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more