exe im eingenen speicher starten
-
CMatt schrieb:
Das initialisieren von dem ding duart ewig, kann es also nicht einfach in ne dll packen, per hook an prog 2 hängen und die RVA so umbiegen das die calls bei mir landen.
Das kapier ich nicht. Weil das andere Programm lange zur Initialisierung braucht, kannst Du es nicht hooken? Welchen Zusammenhang siehst Du da?
CMatt schrieb:
<nur_so_als_info> das ganze soll nur ne kleine hilfe sein und ich will da nicht tage an arbeit rein stecken.. also etweder es geht schnell ich ich lass es ganz..
</nur_so_als_info>Dann lass es, das geht nicht so einfach. Direkt an _tWinMain kommst Du nicht ran.
-
Das kapier ich nicht. Weil das andere Programm lange zur Initialisierung braucht, kannst Du es nicht hooken? Welchen Zusammenhang siehst Du da?
Wenn ich aus prog 1 ne dll mit hook-procs baue und diese an prog 2 hänge muss ich den code jedes mal initialisieren wenn ich prog 2 starte -> dauert ewig. Prog 2 soll nur über meinem code arbeiten wenn prog 1 auch läuft (sonst bleibt alles beim alten) und so wärs natürlich praktisch wenn ich aus prog 2 den initialisierten code aus prog 1 verwenden könnte (was nur geht wenn der prog 2 code im adressraum von prog 1 leigt, denn ein funktionsaufruf über prozessgrenzen hinweg geht bekanntlich nicht..)
Noch als zusatz info: prog 2 ist nicht ein beliebiges progamm sondern immer das selbe, müsste also nur einmal an die adress von WinMain, das muss ncht dynamisch laufen..
-
CMatt schrieb:
, müsste also nur einmal an die adress von WinMain, das muss ncht dynamisch laufen..
Da kommst Du so nicht ran, dazu brauchst du Debug-Info, bzw. das Map-File. Woher weißt Du überhaupt, daß es bei Deinem Prog2 auch WinMain gibt? Ist wWinMain tatsächlich ausgeschlossen?
-
Nö, ist nicht ausgeschlossen, aber hab sie jetzt.. ein hoch auf die guten alten disassembler

-
hi,
ich will sowas ähnliches machen (also auch eine exe in meiner eigenen exe starten).
ich lade die 2. exe mit loadlibrary und springe dann an den entrypoint aus dem header. leider beendet sich mein programm dann aber sofort.gut hab ich mir gedacht, liegt sicher an dem falschen aufruf von GetModuleHandleA(), weil beim start des programms GetModuleHandleA(NULL) aufgerufen wird und somit die adresse von meiner 1. exe zurückgegeben wird.
ich habe jetzt einen hook draufgesetzt, so dass jetzt die richtige adresse zurückgegeben wird. leider funktioniert mein programm immer noch nicht

kann mir irgendwer sagen, wie sich sowas richtig implementieren lässt?
thx, eof
-
was soll den dein zweites programm machen?
vielleicht wär ne pipe oder sowas ähnliches etwas für dich.
-
Soweit ich das mal gelesen hab funktioniert soetwas nur wenn wenn die exe eine relocation-section hat(was bei wahrshceinlich 99% nicht der fall is). Auserdem musst du exit() hooken sonst beendet das "slave" programm dein "master" programm beim beenden gleich mit. Da gibts auch ne gute seite auf der das jemand schonmal gemacht hat sogar mit code und tutorial... ich werd die mal schnell suchen.
-
hi,
ich lade das image der exe an die richtige ImageBase im speicher, eine relocation sollte also nicht nötig sein.
ich hab auch ein wenig rumprobiert. mein ziel soll später sein, dass ich ein beliebiges programm an meins hängen kann und sich beide ausführen (im gleichen prozess). aber auch wenn ich bei einem speziellen programm (ich habe notepade genommen) die WinMain() direkt aufrufe (mit dasm die adresse rausgefunden), dann beendet sich der prozess zwar nicht mehr selbst, aber es wird mir auch kein fenster von notepad angezeigt

naja, wenn irgendwer papers dazu hat: her damit

thx, eof
-
Guck dir hier http://www.luckie-online.de/Delphi/Importe/Nico/ mal von Nico die inmemexe an. Ist zwar Delphi Code, aber die API Aufrufe sind die gleichen. Für mich stellt sich allerdings die Frage wozu das gut sein soll.

-
vielen dank!
es ist zwar weiterhin notwenig, dass ich 2 prozesse laufen hab, aber diese methode hilft mir trotzdem weiter! thx!
ciao, eof