求教为啥delphi写入字节一多就报错?
本帖最后由 冥界3大法王 于 2022-6-6 21:51 编辑procedure TForm1.NewClick(Sender: TObject);
var
vFS: TFileStream;
A1: Integer;
begin
A1 := HexToInt(E2.Text); //要写入的机器码, E2.Text 就是Edit2.Text
//ShowMessage(IntToStr(A1)); //变成了10进制的啦
vFS := TFileStream.Create(sEdit1.Text, fmOpenReadWrite);
try
vFS.Position := HexToInt(E1.Text); //要写入的FOA(文件偏移地址)即在x64dbg中直接复制得到的那个无需转换!Edit1.Text就是E1.Text
vFS.WriteBuffer(A1, Length(E2.Text) div 2);
finally
FreeAndNil(vFS);
end;
end;
function HexToInt(Value: string): Integer;
begin
result := StrToInt('$' + Value);
end;
要写入的 位置假设为0, 90909002B0就会报错
而少一个 90 就正常执行,为啥呢?
@pzx521521 没解决哥们,快来给饭桶哥们看看病。 本帖最后由 baikunlun 于 2022-6-6 22:10 编辑
以我的认知,integer通常是4个字节,你给的数据超了一个字节,该用长整型了。
字符串转为数据流,可以是integer数组吧,转成integer那只能是integer那么大吧。
baikunlun 发表于 2022-6-6 21:59
以我的认知,integer通常是4个字节,你给的数据超了一个字节,该用长整型了
那您能不能给哥们改个不报错的? function HexToInt(Value: string): Int64;
begin
result := StrToInt64('$' + Value);
end; shys 发表于 2022-6-6 22:10
function HexToInt(Value: string): Int64;
begin
result := StrToInt64('$' + Value);
@shys 不行啊,哥们,少写了一个字节,于实际所求有差异啊。
现在用DELPHI的程序猿有点少了哦 A1的定义也必须是INT64, 不改当然还是只有4个byte改变
procedure TForm1.NewClick(Sender: TObject);
var
vFS: TFileStream;
A1: Int64;
begin
A1 := HexToInt64(E2.Text); //要写入的机器码, E2.Text 就是Edit2.Text
//ShowMessage(IntToStr(A1)); //变成了10进制的啦
vFS := TFileStream.Create(sEdit1.Text, fmOpenReadWrite);
try
vFS.Position := HexToInt64(E1.Text); //要写入的FOA(文件偏移地址)即在x64dbg中直接复制得到的那个无需转换!Edit1.Text就是E1.Text
vFS.WriteBuffer(A1, Length(E2.Text) div 2);
finally
FreeAndNil(vFS);
end;
end;
function HexToInt64(Value: string): Int64;
begin
result := StrToInt64('$' + Value);
end; 不懂哦,只能顶顶楼上的 Ashes 发表于 2022-6-6 22:54
A1的定义也必须是INT64, 不改当然还是只有4个byte改变
@Ashes
没变化啊,仍然少写入一个字节啊,朋友。