Moin Delphipraxis,
ich habe zwei kleine Anwendungen geschreiben.
Die eine (Project1) ist eine Formularanwendung und hat einfach nur einen Button, mit folgender Prozedur:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
MessageBoxA(0,'this is a test','test',0);
end;
Mein Zeil ist es nun über ein zweites Programm in diesen Aufruf von MessageBoxA einzugreifen und diesen zu manipulieren.
Habe dazu folgendes Programm geschrieben und teils aus den Beispielen der uallcollection kopiert:
Delphi-Quellcode:
program hook;
{$APPTYPE CONSOLE}
uses
Windows,
uallHook,
uallProcess;
var
origMessageBoxA: function (hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall;
newMessageBoxA: function (hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall;
function callbackMessageBoxA(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall;
begin
Result := newMessageBoxA(hWnd,PChar(lpText+' [hooked]'),lpCaption,uType);
end;
procedure DllMain;
var
dwoglModule: DWord;
begin
dwoglModule := LoadLibrary('user32.dll');
@origMessageBoxA := GetProcAddress(dwoglModule,'MessageBoxA');
uallHook.HookCode(@origMessageBoxA,@callbackMessageBoxA,@newMessageBoxA);
end;
procedure Main;
var
dwPID: DWord;
begin
dwPID := uallProcess.FindProcess('Project1.exe');
if (dwPID <> 0) then
begin
uallHook.InjectMe(dwPID,@DllMain);
end;
end;
begin
Main;
end.
Wenn ich das Programm Project1 gestartet habe und das Programm hook starte bekomme ich immer folgende Fehlermeldungen:
Zitat:
---------------------------
Project1.exe - Fehler in Anwendung
---------------------------
Die Anweisung in "0x00ef1561" verweist auf Speicher in "0x00000008". Der Vorgang
"read" konnte nicht auf dem Speicher durchgeführt werden.
Klicken Sie auf "OK", um das Programm zu beenden.
Klicken Sie auf "Abbrechen", um das Programm zu debuggen.
---------------------------
OK Abbrechen
---------------------------
Zitat:
---------------------------
Project1.exe - Fehler in Anwendung
---------------------------
Die Anweisung in "0x00ef3281" verweist auf Speicher in "0x000c01b3". Der Vorgang
"read" konnte nicht auf dem Speicher durchgeführt werden.
Klicken Sie auf "OK", um das Programm zu beenden.
Klicken Sie auf "Abbrechen", um das Programm zu debuggen.
---------------------------
OK Abbrechen
---------------------------
Zitat:
---------------------------
Project1.exe - Fehler in Anwendung
---------------------------
Die Anweisung in "0x00ef32d2" verweist auf Speicher in "0x000c01b3". Der Vorgang
"read" konnte nicht auf dem Speicher durchgeführt werden.
Klicken Sie auf "OK", um das Programm zu beenden.
Klicken Sie auf "Abbrechen", um das Programm zu debuggen.
---------------------------
OK Abbrechen
---------------------------
Zitat:
---------------------------
Project1.exe - Fehler in Anwendung
---------------------------
Die Anweisung in "0x00ef3281" verweist auf Speicher in "0x000c01b3". Der Vorgang
"read" konnte nicht auf dem Speicher durchgeführt werden.
Klicken Sie auf "OK", um das Programm zu beenden.
Klicken Sie auf "Abbrechen", um das Programm zu debuggen.
---------------------------
OK Abbrechen
---------------------------
Zitat:
---------------------------
Project1.exe - Fehler in Anwendung
---------------------------
Die Anweisung in "0x00ef32d2" verweist auf Speicher in "0x000c01b3". Der Vorgang
"read" konnte nicht auf dem Speicher durchgeführt werden.
Klicken Sie auf "OK", um das Programm zu beenden.
Klicken Sie auf "Abbrechen", um das Programm zu debuggen.
---------------------------
OK Abbrechen
---------------------------
Habt ihr vielleicht eine Idee, worans liegen könnte?
Vielen Dank im Vorraus!
Gruß,
cisum