Registriert seit: 21. Aug 2003
7.332 Beiträge
Delphi 2009 Professional
|
Re: Problem mit der Manifest-Geschichte
25. Mär 2006, 18:42
Du fügst die Procedure "PatchInt3" einfach in deine Unit der Mainform ein.
Und dann schreibst du ganz unten, vor dem end. noch das hin:
Delphi-Quellcode:
initialization
// nur wenn ein Debugger vorhanden, den Patch ausführen
if DebugHook<>0 then
PatchINT3;
Sieht nachher also so aus:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// Hier steht noch dein anderer Code :)
procedure PatchINT3;
var
NOP : Byte;
NTDLL: THandle;
BytesWritten: DWORD;
Address: Pointer;
begin
if Win32Platform <> VER_PLATFORM_WIN32_NT then Exit;
NTDLL := GetModuleHandle(' NTDLL.DLL');
if NTDLL = 0 then Exit;
Address := GetProcAddress(NTDLL, ' DbgBreakPoint');
if Address = nil then Exit;
try
if Char(Address^) <> #$ CC then Exit;
NOP := $90;
if WriteProcessMemory(GetCurrentProcess, Address, @NOP, 1, BytesWritten) and
(BytesWritten = 1) then
FlushInstructionCache(GetCurrentProcess, Address, 1);
except
//Do not panic if you see an EAccessViolation here, it is perfectly harmless!
on EAccessViolation do ;
else raise;
end;
end;
initialization
// nur wenn ein Debugger vorhanden, den Patch ausführen
if DebugHook<>0 then
PatchINT3;
end.
|
|
Zitat
|