我有一个Windows程序(EXE)是写在德尔福(德尔福7我认为)几年前,该程序仍然偶尔使用。它包含一个Single类型变量,它在代码中的某个点乘以0.9。更改浮点数值在exe
我想使用十六进制编辑器在exe文件中将0.9更改为0.8,我需要帮助来查找要更改的代码的相关部分。
变量声明为
private myValue: Single;
,当点击一个按钮组件的编辑值被设置为圆形(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或其他方式)或..
之前你建议我重新编译该项目:我有源代码,但它是一个具有多个依赖项的大型项目。该代码依赖于多个组件包库和数十个第三方组件。为了重新编译代码,可能需要几天时间才能获得并安装旧版本的德里并注册所有组件。不是我想为一个不经常使用的程序的这么小的改变做的事情。
如果我安装了Delphi,我只需编写这几行代码并反汇编/调试它就可以看到汇编代码。有了这个程序集,我可以弄清楚在exe中需要改变什么。我希望有人能指出我正确的方向,所以我不必安装Delphi的旧版本。
你做搜索它作为66 66 66 3F替换文件中呢? –
0.9不能准确表示。最接近的单个确实是'0x3f666666'。但是,你怎么知道常量是作为一个单独存储的。解决这个问题的显而易见的方法是自己编译代码并查看省略的内容。试试看。 –
@SamiKuhmonen尝试这种方式,因为我不确定字节顺序。 – tinform