[HILFE] inline asm!
-
alloca oder alles Assembler. Stackmanipulation bei gleichzeitigem Wechsel zwischen Assembler und Hochsprache schießt dir mehr als nur das Bein weg.
-
also ich denke wenn es nötig ist es so zu machen (was ich vermute da die func sendpacket heißt)
dann willst du an dieser stelle einfach jedes element des arrays nacheinander auf den stack pushen?
würd mich selber mal schwer interressieren wie soetwas geht o0
aber angefangen ersteinmal mit :
for( int i=0; i<(sizeof(arg)/sizeof(datatyp in arg); i++ ) __asm PUSH arg[i]
-
na vlt hab ich mich nich so richtig ausgedrückt
ich will zb sowas an meine function übergeben
unsigned long bla[] = {0,0x19,0,0x120};
und dann sendpacket(bla, x,x);
die werte von bla sollen nacheinander gepusht werden.
-
qqqw mow schrieb:
na vlt hab ich mich nich so richtig ausgedrückt
ich will zb sowas an meine function übergeben
unsigned long bla[] = {0,0x19,0,0x120};
und dann sendpacket(bla, x,x);
die werte von bla sollen nacheinander gepusht werden.
Ich glaube ehrlich gesagt, dass du etwas massiv falsch verstanden hast. Warum musst du was auf welchen Stack pushen? Mein Bauch sagt mir, dass es nicht um diesen Stack geht...
-
void SendPacket( void *arg,int narg,unsigned long xxx, unsigned long xxx ) { __asm { mov ecx,narg mov eax,arg l1: push DWORD ptr [eax] sub ecx,1 jnz l1 } //... was auch immer __asm { mov ecx,narg lea esp,[esp+ecx*4] } }
-
... nur falls du vor hast eine Funktion auf zu Rufen (call):
Wenn es eine sdtcall-Funktion ist, entfällt der zweite asm-Block(stack-Korrektur). Bei einer C Funktion folgt der zweite Block direkt auf den call.
-
ich hätts jetzt einfach so gemacht:
for( int i=0; i<(sizeof(arg)/sizeof(datatyp in arg); i++ )
tmp = arg[i]; // tmp türlich der datentyp dann
__asm PUSH tmp
-
Als Kommentar dazu zitiere ich mal ein paar vorangegangene Postings, um ihnen nochmals Nachdruck zu verleihen:
/rant/ schrieb:
for( int i=0; i<sizeof(arg); i++ ) __asm PUSH arg
Was soll dies bitte sein? sizeof(arg) ist 4, aber in diesem Zusammenhang ergibt das doch keinen Sinn?
*
Impliziert: der Wert von sizeof(arg) ist unabhaengig von der Anzahl der Elemente im Array "arg", worum es dir wohl geht. Die Anzahl der Elemente musst du irgendwie gesondert in einer Variable mitschicken oder durch Spezialeintraege im Array markieren.
Weiter:
camper schrieb:
alloca oder alles Assembler. Stackmanipulation bei gleichzeitigem Wechsel zwischen Assembler und Hochsprache schießt dir mehr als nur das Bein weg.
[i]Kann* sein, dass das mit so einem Misch-Code gut geht, aber wenn du so ein wildes Gefrickel aufgrund irgendwelcher widrigen Umstaende unbedingt fabrizieren musst, solltest du schon ganz genau wissen, was du da tust. Den Eindruck vermittelst du ehrlich gesagt aber nicht gerade.Und deswegen bleibt immer noch die Frage nach dem "WTF!? Warum eigentlich?"
/rant/ schrieb:
Ich glaube ehrlich gesagt, dass du etwas massiv falsch verstanden hast. Warum musst du was auf welchen Stack pushen? Mein Bauch sagt mir, dass es nicht um diesen Stack geht...
-
for( int i=0; i<(sizeof(arg)/sizeof(datatyp in arg); i++ ) { tmp = arg[i]; // tmp türlich der datentyp dann __asm PUSH tmp } sollte doch so gehen ;P so what?
-
also überleg erstmal was ein packet ist? Normal nur ein char array. Warum versuchst du also ein int array zu pushen -.- Mach einfach push chararray und die addresse ist aufm stack gepushed mehr brauchst du doch nicht!!