Vista la necesidad, publico la traducción del código publicado
aquí.
Código Delphi
[-]
procedure Replace(Buffer, Val, newVal: PBYTE; SizeBuffer, SizeVal: cardinal);
var
n, i: cardinal;
begin
for n:= 0 to SizeBuffer-1 do
begin
if PBYTE((cardinal(Buffer) + n))^ = Val^ then
begin
for i:= 1 to SizeVal-1 do
if PBYTE(cardinal(Buffer)+n+i)^ <> PBYTE(cardinal(Val)+i)^ then break;
if i=sizeVal then
CopyMemory(PBYTE(cardinal(Buffer)+n), newVal, SizeVal);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
MS: TMemoryStream;
begin
MS:= TMemoryStream.Create;
MS.LoadFromFile('project1.exe');
Replace(MS.Memory, PBYTE(PCHAR('hola')), PBYTE(PCHAR('casa')), MS.Size, 4);
MS.SaveToFile('prueba.exe');
MS.destroy;
end;
Saludos.