我有一个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。
答案 0 :(得分:9)
浮点文字常量在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 FE 3F