1
我正在研究FastMM的代碼,它在運行時更改方法和函數的地址。但我不明白一些事情。FastCode:研究其代碼
http://koders.com/delphi/fid356C72C9C454FA74A916971690F624B0FF9111E5.aspx?s=pos
我的疑問是第47行: 「如果PBYTE(AStub)^ = $ E8則」 爲什麼這種比較?好的,檢查它是否被分配。我錯了嗎 ?但爲什麼$ E8(232)? 如果它總是相同的值,不會總是相同的結果?
其餘的代碼在我心中「確定」。但是,如果有人能解釋所有這一切,我感謝。
tks in advice。
爲了進一步澄清,它正在查看AStub中第一個字節的**內容**,而不是AStub的**地址**(請注意解引用運算符'^'),以查看它是否爲CALL指令。 – 2011-03-30 17:04:30
匈牙利....我發現http://faydoc.tripod.com/cpu/call.htm看看電話,真正的操作碼是E8。 :D有趣,我有更多的問題,我很快會問。 – 2011-03-30 17:48:56
@SaCi完全如我所說。這個代碼是關於用自修改代碼替換另一個函數的。通過解碼CALL($ E8)旁邊的相對地址,FastcodeGetAddress可用於要更改的代碼。然後FastcodeAddressPatch找到該代碼,即CALL的目標,並將其更改爲JMP($ E9)以實現新實現。 – 2011-03-30 17:55:06