Skip navigation

Feltétel nélküli ugró utasítások

Áttekintés

A feltétel nélküli ugrásoknál a vezérlés a programban elhelyezett címkéhez kerül.

A címkéket a programban általában a C-hez hasonlóan a sor elejére írt címkenévvel helyezhetjük el, amelyet kettőspont követ.

JMP

A legegyszerűbb utasítás a JMP.

Szintaxisa:

JMP cimke

Hatására a vezérlés a megadott cimke paraméterre kerül.

pl.:

    MOV     EAX, 2
    JMP     oda ; Ugrás az "oda" cimkére

MOV EAX, 0 ; Ez az utasítás kimarad, hiszen átugrottuk

oda:
ADD EAX, 2

A fenti kódrészlet lefutása után az EAX értéke 4 lesz. A nullázó utasítás nem fut le, mivel átugrottuk.

Eljáráshívás

A feltétel nélküli vezérlés átadásnak egy formája az eljáráshívás és a visszatérés.


Az eljáráshívás a CALL utasítással valósítható meg.

Szintaxisa:

CALL eljárásnév

A CALL hatására az EIP megnövelt értéke a verembe kerül mentésre, majd a a vezérlés átkerül az eljárás elejére.


A call Utasítás párja a RET, amely a visszatérést oldja meg.

Szintaxisa:

RET [n]

A RET utasítás a verem tetején levő értéket az EIP-be helyezi, ezzel visszaállítva az EIP korábbi értékét, és a vezérlést visszaadva a hívó helyére.

Opcionális paramétere egy érték. Az itt megadott darabszámú byte-ot eldobunk a verem tetejéről.

FONTOS!!!

A RET utasítást nem hagyjuk el az eljárás végéről. Ha nincs meg, akkor a processzor nem tér vissza, és az eljárás után memóriaterületben található számsorozatot hajtja végre programkód-ként.


Példa:

; ...

.code

; Eljaras, ami kinullazza az EAX-et
nullaz PROC

MOV EAX, 0

RET

nullaz ENDP

main PROC

; ...

CALL nullaz ; EAX kinullazasa

call WriteInt ; A kiirt ertek 0 lesz

;

Invoke Exitprocess 0

main ENDP

; ...