بأي حجم Binary/Hex
والأفضل:
كود :
[color=Black][COLOR=Blue]procedure [/color]PatchBytes(FileTarget: string; Value: String; Offset: LongInt; IsHex: Boolean = True; MakeBackup: Boolean = True);
[color=Blue]var[/color]
EXEStream: TMemoryStream;
Buf: String;
[color=Blue]begin[/color]
SetLength(Buf, Length(Value) div 2);
[color=Blue]if [/color]IsHex [color=Blue]then[/color]
HexToBin(PChar(Value), @Buf[1], Length(Value))
[color=Blue]else [/color]Buf := Value;
EXEStream := TMemoryStream.Create;
[color=Blue]try[/color]
EXEStream.LoadFromFile(FileTarget);
[color=Blue]if [/color]MakeBackup [color=Blue]then[/color]
EXEStream.SaveToFile(ChangeFileExt(FileTarget, '.bak'));
EXEStream.Seek(Offset, 0);
EXEStream.WriteBuffer(Buf[1], Length(Buf));
EXEStream.SaveToFile(FileTarget);
[color=Blue]finally[/color]
EXEStream.Free;
[color=Blue]end[/color]; // try
[color=Blue]end[/color];[/COLOR]والأفضل:
كود :
[color=Black][COLOR=Blue]procedure [/color]PatchBytes(FileTarget: [color=Blue]string[/color]; Value: [color=Blue]String[/color]; Offset: LongInt; MakeBackup: Boolean = True);
[color=Blue]var[/color]
EXEStream: TMemoryStream;
Bytes: LongWord;
I: Integer;
[color=Blue]begin[/color]
EXEStream := TMemoryStream.Create;
[color=Blue]try[/color]
EXEStream.LoadFromFile(FileTarget);
[color=Blue]if [/color]MakeBackup [color=Blue]then[/color]
EXEStream.SaveToFile(ChangeFileExt(FileTarget, '.bak'));
EXEStream.Seek(Offset, 0);
I := 1;
[color=Blue]while [/color]I < Length(Value) [color=Blue]do begin[/color]
Bytes := StrToInt('$'+Value[I] + Value[I+1]);
Inc(I, 2);
EXEStream.WriteBuffer(Bytes, 1);
[color=Blue]end[/color];
EXEStream.SaveToFile(FileTarget);
[color=Blue]finally[/color]
EXEStream.Free;
[color=Blue]end[/color]; // try
[color=Blue]end[/color];[/COLOR]
