Frage

Ich habe eine Frage bezüglich nasm und seine Bindung an C ++. Ich erkläre eine litte Testfunktion als

extern "C" void __cdecl myTest( byte i1, byte i2, int stride, int *width );

und ich nenne es wie folgt aus:

byte i1 = 1, i2 = 2;
int stride = 3, width = 4;
myTest( i1, i2, stride, &width );

Das Verfahren dient nur Montag zu debuggen und hat einen Blick auf, wie der Stapelzeiger verwendet wird, um die Argumente zu erhalten. darüber hinaus wird der Zeiger Argumente Wert auf 7, eingestellt wird, dass Werke, um herauszufinden, wie. Dies wird wie folgt durchgeführt:

    global _myTest

_myTest:
    mov     eax, [esp+4]     ; 1
    mov     ebx, [esp+8]     ; 2
    mov     ecx, dword [esp+16]    ; width
    mov     edx, dword [esp+12]    ; stride

    mov eax, dword [esp+16]
    mov dword [eax], 7

    ret

und kompiliert über

yasm -f win32 -g cv8 -m x86 -o "$(IntDir)\$(InputName).obj" "$(InputPath)"

, dann auf die c ++ App verknüpft. Im Debug-Modus, funktioniert alles einwandfrei. die Funktion wird ein paar Mal genannt und funktioniert wie erwartet, während im Release-Modus die Funktion einmal funktioniert, aber nachfolgende Programm Operationen fehlschlagen. Es scheint mir, was falsch ist, etwas mit Stapel / Rahmenzeiger, nah / fern, aber ich bin ganz neu in diesem Thema und brauchen ein wenig Hilfe. Danke im Voraus! a.

War es hilfreich?

Lösung

Nun, es scheint, dass ich ebx per Push erhalten habe / Pop.

Andere Tipps

kann dies hilft: FLAC einige Quellen in Assembler verwendet, die durch nasm zusammengestellt bestimmt werden <. / p>

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