在exe中更改浮点值

Changing floating point value in exe

我有一个 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。

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

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

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