ich hab eine recht verzwickte frage was asm bzw funktionsaufrufe betrifft.
ich möchte gerne in einem anderen programm eine funktion aufrufen. die func-adresse etc hab ich, das problem dabei ist, dass wenn ich die funktion calle das programm danach abstürzt.
für das ganze habe ich meinen asm code in den thread gebracht, von dem aus die funktion aufgerufen werden soll. zuvor hab ich den thread suspendiert, den eip zu meinem code zeigen lassen und den vorherigen eip auf den stack schreiben lassen. dann speicher ich alle register, calle die funktion und nach abschluss stell ich die register wieder her und am ende von meinem codeteil mit ret wieder zurück zum originalcode. dabei stürzt, wen wunderts, das programm ab.
meine vermutungen sind folgende:
die funktion die ich calle bearbeitet den stack soweit, dass nachdem die funktion abgearbeitet ist, der stack nich mehr der gleiche ist wie davor, deswegen stimmt die rücksprung addi welche ich zu beginn gepush habe nich mehr bzw es liegen andere sachen drauf. wäre es hierbei denkbar, den esp zwischenzuspeichern und nach der funktion wieder herzustellen? was passiert denn wenn ich den eip "runter schiebe" mit den werten drüber, können die noch was "anrichten"? kann man den kompletten stack speichern und wieder herstellen?
die andere vermutung ist, die funktion die ich calle springt selber irgendwo andershin im code und dort wird dann was vom stack geholt (in dem fall meine gepushte rücksprung adresse) womit der code nichts anfangen kann.
ich hoffe mal ich konnte mich verständlich ausdrücken
ich denke, das geht ziemlich in richtung reflection von java womit man ja auch methoden aufrufen kann ohne sie zu kennen...
ist meine idee/vorhaben generell umsetzbar?
EDIT:
leider kann ich selber hier nicht antworten, aber das problem ist gelöst. ich hatte das falsche format für die übergabe parameter
ich möchte gerne in einem anderen programm eine funktion aufrufen. die func-adresse etc hab ich, das problem dabei ist, dass wenn ich die funktion calle das programm danach abstürzt.
für das ganze habe ich meinen asm code in den thread gebracht, von dem aus die funktion aufgerufen werden soll. zuvor hab ich den thread suspendiert, den eip zu meinem code zeigen lassen und den vorherigen eip auf den stack schreiben lassen. dann speicher ich alle register, calle die funktion und nach abschluss stell ich die register wieder her und am ende von meinem codeteil mit ret wieder zurück zum originalcode. dabei stürzt, wen wunderts, das programm ab.
meine vermutungen sind folgende:
die funktion die ich calle bearbeitet den stack soweit, dass nachdem die funktion abgearbeitet ist, der stack nich mehr der gleiche ist wie davor, deswegen stimmt die rücksprung addi welche ich zu beginn gepush habe nich mehr bzw es liegen andere sachen drauf. wäre es hierbei denkbar, den esp zwischenzuspeichern und nach der funktion wieder herzustellen? was passiert denn wenn ich den eip "runter schiebe" mit den werten drüber, können die noch was "anrichten"? kann man den kompletten stack speichern und wieder herstellen?
die andere vermutung ist, die funktion die ich calle springt selber irgendwo andershin im code und dort wird dann was vom stack geholt (in dem fall meine gepushte rücksprung adresse) womit der code nichts anfangen kann.
ich hoffe mal ich konnte mich verständlich ausdrücken

ist meine idee/vorhaben generell umsetzbar?
EDIT:
leider kann ich selber hier nicht antworten, aber das problem ist gelöst. ich hatte das falsche format für die übergabe parameter
