ASM Fehler
Übersicht

![]() |
Der EisvogelBetreff: ASM Fehler |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo
Ich führe derzeitig Krieg mit ASM. Folgenden Code möchte ich ausführen: Code: [AUSKLAPPEN] format MS COFF
public _OpenABC _OpenABC: push ebp mov ebp,esp push eax push ebx push ecx push edx mov edx,[ebp+18h] mov eax,[ebp+10h] mov ebx,[ebp+0Ch] push eax mov eax,[ebp+08h] push ebx push 0 push eax mov ecx,[ebp+14h] call edx pop edx pop ecx pop ebx pop eax mov esp,ebp pop ebp ret 014h Hiermit wird die Funktion eingebunden: BlitzMax: [AUSKLAPPEN] Extern Das Problem ist, nicht, dass es nicht funktioniert, sondern, dass irgend etwas kaputt geht, und zwar eine Variable die an ganz anderer Stelle im Programm benutzt wird, in BlitzMax. Zur Sicherheit, habe ich die Register mal abgesichert, aber auch das bringt keinen Erfolg. Auch durch Weglassen des Call-Befehls, um Fehlfunktionen der aufgerufenen Funktion zu vermeiden, ändert sich nichts. Somit hab ich das Problem auf den oben genannten Code isoliert. Aber ich habe keine Ahnung was daran jetzt falsch sein soll. Ich benutzte mehrere Code-Fetzen dieser Art und alle funktionieren problemlos. Einzige Besonderheit von diesem Fetzen ist, dass es 5 Parameter hat, alle anderen haben nur 4, und ich übergebe floats, anstatt nur ints, aber das sollte nach meinem wissen in ASM bei dieser Anwendung keine Rolle spielen. Irgendwas muss auf jeden Fall dafür sorgen, dass eine Fremdvariable überschrieben wird, denn ein ganz bestimmter String aus meinem Hauptprogramm wird mit dem Aufruf dieser Funktion unbrauchbar und verursacht beim Verwenden der Variable einen Error. Sieht jemand irgendeinen Fehler in diesem ASM Code? MfG Der Eisvogel |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weiß ja nicht, wo dich das "call edx" hinführt, aber wenn zu einer Blitzmax-Funktion, dann musst du danach die Parameter vom Stack nehmen. Der der aufruft, nimmt danach auch die Parameter vom Stack. Deswegen würde ich es auch mit einfachem "ret" ohne Parameter versuchen:
Code: [AUSKLAPPEN] format MS COFF
public _OpenABC _OpenABC: push ebp mov ebp,esp push eax push ebx push ecx push edx mov edx,[ebp+18h] mov eax,[ebp+10h] mov ebx,[ebp+0Ch] push eax mov eax,[ebp+08h] push ebx push 0 push eax mov ecx,[ebp+14h] call edx add esp, 16 pop edx pop ecx pop ebx pop eax mov esp,ebp pop ebp ret |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Der Eisvogel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Super, wie kann ich dir nur danken! Ich mach da schon ewig dran rum. Das "call edx" führt aber zu einer Funktion die die Parameter selbst vom Stack holt. So hatte ich es auch gelernt, deswegen bin ich garnicht auf die Idee gekommen. Ich hab also jetzt das "ret" ohne Parameter, aber die Parameter hol ich noch nicht vom Stack, das macht halt wie gesagt die Funktion die ich aufrufe. Keine Ahnung warum, aber so steht es in IDA Pro.
Aber das ist echt Wahnsinn wie ASM einen da wütend machen kann. Ich war schon kurz davor das ganze Projekt wegen dem Mist abzubrechen, aber jetzt funktioniert es. Du bist mein Retter. Danke, danke, danke! |
||
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB Projekte: Window-Crasher Ich liebe es mit der WinAPI zu spielen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group