バイナリデータの任意アドレスの値を書き換えるには?

解決


ほし  2007-02-07 05:11:44  No: 24812

どうか、どなたか、ご教示お願いします。

あるバイナリデータの任意アドレスの値を、
書き換えるプログラムを作ろうとしています。
(テキスト表示される方でなく16進数で表示される方)

バイナリファイルを読み込んで、
バイナリファイルに書き込む部分は、何とか出来ました(汗汗

しかし、任意のアドレスの値を、
別の値に変更するコードが分かりません。

今は、こんなコードです。
とりあえず、最初から2ブロック分を「1」に
書き換えることは出来、そこで行き詰まった状態です。

-------------------------
var
  TempStream : TMemoryStream;
  a: array [0..1] of Byte;
begin
  FillChar(a, SizeOf(a), 1);

  TempStream := TMemoryStream.Create;
  TempStream.LoadFromFile('書換前.dat');

  TempStream.WriteBuffer(a, SizeOf(a));
  TempStream.SaveToFile('書換後.dat');
  TempStream.Free;

end;
-------------------------

どうか、どなたか、ご教示お願いします。


orz  2007-02-07 05:27:05  No: 24813

TempStream.Postion := 任意の場所
  TempStream.WriteBuffer(a, SizeOf(a));


ほし  2007-02-07 20:02:53  No: 24814

orzさん、素早いアドバイス、ありがとうございました!!
希望通りの事ができました。

function HexToInt( const S: string ): Integer;
var
  E: Integer;
begin
  Val( '$' + S, Result, E );
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  TempStream : TMemoryStream;
  tmpByte: Byte;
begin
  TempStream := TMemoryStream.Create;
  TempStream.LoadFromFile('書換前.dat');
  tmpByte:= HexToInt('FF');
  TempStream.Position := HexToInt('150');
  TempStream.WriteBuffer(tmpByte, SizeOf(tmpByte));
  TempStream.SaveToFile('書換後.dat');
  TempStream.Free;
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加