Gnu Assembler: get-Adresse Label / Variable [INTEL SYNTAX]
-
19-09-2019 - |
Frage
Ich habe einen Code wie folgt:
.bss
woof: .long 0
.text
bleh:
...some op codes here.
Jetzt würde Ich mag die Adresse des Einschlag in eax bewegen. Was ist die Intel-Syntax Code hier für das zu tun? Das gleiche gilt mit in bleh Adresse zu bewegen, sagen wir, ebx.
Ihre Hilfe ist sehr willkommen!
Lösung
Der bss Abschnitt kann keine tatsächlichen Objekte in ihm. Einige Montierer können noch können Sie den .bss Abschnitt wechseln, aber alles, was Sie dort tun können, ist so etwas sagen wie: x: . = . + 4
.
In den meisten Monteuren in diesen Tagen und speziell in Gnu für Intel, gibt es nicht mehr eine .bss
Richtlinie, so dass Sie vorübergehend zu bss wechseln und das bss Symbol mit so etwas wie in einem Schuss erstellen: .comm sym,size,alignment
. Aus diesem Grunde ist man vermutlich wird einen Fehler erhalten „ bss Richtlinie nicht erkannt “ oder so ähnlich.
Und dann können Sie die Adresse erhalten mit entweder:
lea woof, %eax
oder
movl $woof, %eax
Update: aha, Intel-Syntax, nicht Intel-Architektur. 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
Alle lea
Formulare sollten den gleichen Code erzeugen.