吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1297|回复: 27
收起左侧

[求助] 求教为啥delphi写入字节一多就报错?

[复制链接]
冥界3大法王 发表于 2022-6-6 21:46
本帖最后由 冥界3大法王 于 2022-6-6 21:51 编辑

[Delphi] 纯文本查看 复制代码
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就会报错
image.png
而少一个 90 就正常执行,为啥呢?
image.png





发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 冥界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;

免费评分

参与人数 1吾爱币 +1 收起 理由
冥界3大法王 + 1 不报错了,然而最后一个字节没有写入进去。

查看全部评分

 楼主| 冥界3大法王 发表于 2022-6-6 22:17
shys 发表于 2022-6-6 22:10
function HexToInt(Value: string): Int64;
begin
  result := StrToInt64('$' + Value);

@shys 不行啊,哥们,少写了一个字节,于实际所求有差异啊。
image.png
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
没变化啊,仍然少写入一个字节啊,朋友。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 12:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表