冥界3大法王 发表于 2022-6-6 21:46

求教为啥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 就正常执行,为啥呢?






冥界3大法王 发表于 2022-6-6 21:57

@pzx521521 没解决哥们,快来给饭桶哥们看看病。

baikunlun 发表于 2022-6-6 21:59

本帖最后由 baikunlun 于 2022-6-6 22:10 编辑

以我的认知,integer通常是4个字节,你给的数据超了一个字节,该用长整型了。

字符串转为数据流,可以是integer数组吧,转成integer那只能是integer那么大吧。

冥界3大法王 发表于 2022-6-6 22:10

baikunlun 发表于 2022-6-6 21:59
以我的认知,integer通常是4个字节,你给的数据超了一个字节,该用长整型了

那您能不能给哥们改个不报错的?

shys 发表于 2022-6-6 22:10

function HexToInt(Value: string): Int64;
begin
result := StrToInt64('$' + Value);
end;

冥界3大法王 发表于 2022-6-6 22:17

shys 发表于 2022-6-6 22:10
function HexToInt(Value: string): Int64;
begin
result := StrToInt64('$' + Value);


@shys 不行啊,哥们,少写了一个字节,于实际所求有差异啊。

earlc 发表于 2022-6-6 22:47

现在用DELPHI的程序猿有点少了哦

Ashes 发表于 2022-6-6 22:54

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;

yamisxu 发表于 2022-6-6 22:56

不懂哦,只能顶顶楼上的

冥界3大法王 发表于 2022-6-6 23:30

Ashes 发表于 2022-6-6 22:54
A1的定义也必须是INT64, 不改当然还是只有4个byte改变




@Ashes
没变化啊,仍然少写入一个字节啊,朋友。
页: [1] 2 3
查看完整版本: 求教为啥delphi写入字节一多就报错?