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!

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top