如此简单的一个问题,真是让人哭笑不得, 敬佩bmsr的好心, 但对bmsr的水平真不敢恭维,
procedure TForm1.Button1Click(Sender: TObject);
var f : TFileStream;
b : byte;
xpos : integer; // or int64;
begin
f := TFileStream.Create('d:/yourfilename.exe', fmOpenReadWrite);
while f.Position < f.Size - 4 do
begin
xpos := f.Position ;
f.Read(b,1);
//3b 67 aa ff进行修改,改为de 67 aa ff
if b=$3b then
begin
f.Read(b,1);
if b=$67 then
begin
f.Read(b,1);
if b=$aa then
begin
f.Read(b,1);
if b=$ff then
begin
// ok, now update new data...
f.Seek(xpos, soFromBeginning);
b := $de; f.Write(b,1);
b := $67; f.Write(b,1);
b := $aa; f.Write(b,1);
b := $ff; f.Write(b,1);
// then close the file and exit
f.Destroy ;
exit;
end;
end;
end;
end;
end;
// finally, must close the file
f.Destroy ;
// 这是最简单直接的方法, 如果要速度, 可以优化文件的读写与搜索方法
end;