delphi Код:
var
GetProcAddressNext: function(Module: THandle; ProcName: PChar): TFarProc; stdcall;
function MyGetProcAddressHook(Module: THandle; ProcName: PChar): TFarProc; stdcall;
begin
messagebox(0,'MyGetProcAddressHook','MyGetProcAddressHook',0);
result:=GetProcAddressNext(Module,ProcName);
end;
function SaveOldFunction(Proc: pointer; Old: pointer): dword;
var
SaveSize, Size: dword;
Next: pointer;
begin
SaveSize := 0;
Next := Proc;
while SaveSize < 5 do
begin
Size := SizeOfCode(Next);
Next := pointer(dword(Next) + Size);
Inc(SaveSize, Size);
end;
CopyMemory(Old, Proc, SaveSize);
byte(pointer(dword(Old) + SaveSize)^) := $e9;
dword(pointer(dword(Old) + SaveSize + 1)^) := dword(Next) - dword(Old) - SaveSize - 5;
Result := SaveSize;
end;
function MyHookCode(TargetProc, NewProc: pointer; var OldProc: pointer): boolean;
var
Address: dword;
OldProtect: dword;
OldFunction: pointer;
Proc: pointer;
begin
Result := False;
try
Proc := TargetProc;
Address := dword(NewProc) - dword(Proc) - 5;
VirtualProtect(Proc, 5, PAGE_EXECUTE_READWRITE, OldProtect);
GetMem(OldFunction, 255);
dword(OldFunction^) := dword(Proc);
byte(pointer(dword(OldFunction) + 4)^) := SaveOldFunction(Proc, pointer(dword(OldFunction) + 5));
byte(Proc^) := $e9;
dword(pointer(dword(Proc) + 1)^) := Address;
VirtualProtect(Proc, 5, OldProtect, OldProtect);
OldProc := pointer(dword(OldFunction) + 5);
except
Exit;
end;
Result := True;
end;
function CloneTable : boolean;
var
hKernel32:Cardinal;
pGetProcAddress:Pointer;
begin
result:=false;
hKernel32:=GetModuleHandle('kernel32.dll');
if hKernel32=0 then exit;
pGetProcAddress:=GetProcAddress(hKernel32,'GetProcAddress');
if pGetProcAddress=nil then exit;
result:=MyHookCode(pGetProcAddress,@MyGetProcAddressHook,@GetProcAddressNext);
end;
я уже не знаю, ошибка и всё(