Cita:
Empezado por escafandra
Seguro que este tema te sirve para empezar.
Saludos.
|
Código:
Program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
function Match(pData: PByte; bMask: PByte; szMask: PChar): Boolean;
begin
while (szMask^ <> #0) do
begin
if (szMask^ = 'x') and (pData^ <> bMask^) then
begin
Result := false;
exit;
end;
Inc(szMask);
Inc(pData);
Inc(bMask);
end;
Result:= (szMask^ = #0);
end;
function FindPattern(dwAddress, dwLen : Cardinal; bMask : PBYTE; szMask : PCHAR) : Cardinal;
var
i : Cardinal;
begin
Result:= 0;
for i := 0 to dwLen-1 do
if(Match(PBYTE(dwAddress + i), bMask, szMask)) then
begin
Result := Cardinal((dwAddress + i));
break;
end;
end;
function test() : string;
begin
Result := 'Hola'
end;
procedure Fin;
begin
end;
var
i: Cardinal;
dwLen: Cardinal;
szMask: PCHAR;
bMask: PBYTE;
Addr: cardinal;
begin
i := Cardinal($401000);
dwLen := Cardinal($409000);
bMask:= @Test; // bMask contiene el código de la función a buscar puesto que es un puntero a la misma.
szMask := PCHAR('xxxxxxxxxxx???xxx');
// MaxLen:= Cardinal(@Fin)-Cardinal(@Test); // máxima longitud de la máscara
WriteLn(test);
Addr:= FindPattern(i, dwLen, bMask, szMask);
WriteLn(IntToHex(Addr,8));
ReadLn;
end.
El codigo esta excelente, pero como lo haria para que scanee este Array of byte: 75 ? 38 87 ? ? ? ? 75 ? 8b ce
en un proceso determinado Ejemplo: Prueba.exe y al scanear ese array el address me lo muestre en un edit. Espero tu ayuda, gracias