我有一個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