gpt4 book ai didi

delphi - 更改exe中的浮点值

转载 作者:行者123 更新时间:2023-12-03 15:07:26 26 4
gpt4 key购买 nike

我有一个Windows程序(exe),它是几年前用Delphi(我认为是Delphi 7)编写的,并且该程序仍然偶尔使用。它包含一个 Single 类型变量,该变量在代码中的某个位置乘以 0.9。

我想使用十六进制编辑器将 exe 文件中的 0.9 更改为 0.8,并且我需要帮助才能找到要更改的代码的相关部分。

变量声明为

private  myValue: Single;

单击按钮时,组件的编辑值将设置为 Round(myValue * 0.9)

procedure MyForm.buttonClick(Sender: TObject);
begin
if button.Down then
myEditComponent.EditValue := Round(myValue * 0.9);
end;

值 0.9 在整个代码中只使用了一次,所以我认为应该很容易找到它。我了解到 0.9 作为 DWORD 的十六进制表示应该是 0x3f666666,但我在 exe 中找不到该值。

所以要么是我错了,0.9 用不同的十六进制字符串表示,要么编译器以不同的方式制定了这个计算(如 myValue * 9/10 或其他方式)或 ..

在您建议我重新编译该项目之前:我有源代码,但它是一个具有多个依赖项的大型项目。该代码依赖于多个组件包库和数十个第三方组件。获取并安装旧版本的 Delhi 并注册所有组件以重新编译代码可能需要几天的时间。我不想对一个不常用的程序做如此小的改变。

如果我安装了 Delphi,我只需编写这几行代码并反汇编/调试它即可查看汇编代码。有了程序集,我就可以找出 exe 中需要更改的内容。我希望有人能给我指出正确的方向,这样我就不必安装旧版本的 Delphi。

最佳答案

浮点常量在 32 位版本的 Delphi 中存储为 80 位扩展。

值 0.9 存储为 66 66 66 66 66 66 66 E6 FE 3F

对于 0.8,将其替换为 CD CC CC CC CC CC CC CC CC FE 3F

关于delphi - 更改exe中的浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37766198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com