C++-Funktion in Assembler
-
Hallo,
der Titel klingt vielleicht etwas verwirrend, aber es ist ungefähr so:Ich habe fließenden Assembler-Code, der macht, was er soll. Nun kommt er zu einer stelle, an der 3 Werte auf den Stack gelegt werden. Danach wird eine Funktion aufgerufen, die diese 3 Werte auf dem Stack verarbeitet.
Meine Frage ist nun: wie kann ich eine C++-Funktion in diesen Code einbinden ?
Wie bringe ich den Ablauf dazu, eine ordentliche C++-Funktion zu akzeptieren ?Danke im Voraus...
-
Anson schrieb:
Meine Frage ist nun: wie kann ich eine C++-Funktion in diesen Code einbinden ?
Das kommt sehr auf die Calling convention deines Compilers an. Imho ist es bei den meisten so, dass du die Argumente in umgekehrter Reihenfolge auf den Stack legst, dann die Funktion aufrufst und anschließend die Argumente wieder vom Stack nimmst. Es kann aber auch sein, dass der Aufgerufene die Argumente vom Stack nimmt.
dein Compiler zu wissen wäre ein Anfang.Den Funktionsnamen herauszufinden kann unter Umständen auch schwierig sein, da er dem name mangling unterliegt (sofern die Funktion nicht als extern "C" deklariert wurde).
Um dir da zu helfen brauchte man auch den Namen des verwendeten Compilers und das Betriebssystem (wegen ein paar Tools).Wie bringe ich den Ablauf dazu, eine ordentliche C++-Funktion zu akzeptieren ?
Definiere ordentliche C++ Funktion. Heißt das für dich ne Memberfunktion? Dann kommt zu den Argumenten noch ein this Zeiger, welcher je nach calling convention verschieden übergeben werden kann (Stack, register ecx).
sorry, aber zu wenig infos

btw. ich hoffe ja das du gcc verwendest
-
Ich glaube es funktioniert folgendermaßen:
Wenn die Funktion unter Assembler so aussieht:PUSH EBP PUSH 1 PUSH 5 PUSH ECX CALL Sample.#10900Dann benötigt der Call eben diese 4 Parameter. In C++ würde das ungefähr so aussehen:
__stdcall function(int value1, int value2, int value3, int value4)Ich benutze Dev-C+, btw. :p
-
Musst dabei aber beachten, dass value4=ebp, value3=1, value2=5, value1=ecx beim aufruf ist und der Stack nach dem Aufruf bereits aufgeräumt wurde.
btw. Dev-C++ ist kein Compiler, sondern eine IDE

-
dann hat er halt den gnu compiler. (ACH NEEEEEEEEEEEEEEEEE!?!)

mfg füsig