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