nasm / yasm Argumente, Bindung an C ++
-
21-09-2019 - |
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.
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>