Hi,
die InjectMe Funktion habe ich nur eingebaut, damit man nicht immer noch eine
Dll schreiben muss. Da die Exe als
Dll in den Zielprozess geladen wird, kannst du Handles (z.B. die Console) die du im Main deiner Exe geladen hast nicht weiterverwenden. Also auch wenn du z.B. im Hauptprogramm einen Stream oeffnest, kannst du diesen in deiner Hook-Funktion nicht weiterverwenden.
Du solltest aber eine zweite Console im Zielprozess oeffnen koennen (AllocConsole). Hooken ueber Prozessgrenzen ist nicht moeglich (nur mit viel Aufwand ueber
IPC, siehe Virtueller Adressraum).
vill hillft dir sowas:
Delphi-Quellcode:
function callbackUmleitung(a:Double): Double; stdcall;
begin
if FirstCall then begin
FirstCall := false;
AllocConsole;
end;
Writeln('original function: argument = '+FloatToStr(a) ); //bringt Project1.exe zum absturz...
a:=50.1337;
Result := OriginalFunction(a); //Wert wurde erfolgreich geändert und die Ursprüngliche Funktion wird aufgerufen (mit dem neuen Wert)
end;
Ansonsten muesse es auch eine Moeglichkeit geben, im Zielprozess auf Exe-Main zu reagieren, muesse ich aber selbst erstmal nachschauen...