我正在研究FastMM的代码,它在运行时更改方法和函数的地址。但我不明白一些事情。
http://koders.com/delphi/fid356C72C9C454FA74A916971690F624B0FF9111E5.aspx?s=pos
我怀疑是在第47行:“如果PBYTE(AStub)^ = $ E8那么” 为什么这个比较?好的,检查它是否已分配。我错了吗 ?但为什么$ E8(232)? 如果它总是相同的值,那么总是不一样的结果吗?
其余的代码在我看来是“好的”。但如果有人可以解释所有这些我感谢。
建议。
答案 0 :(得分:7)
该代码返回CALL指令的目标地址。测试只是检查它确实是一个传递给例程的CALL指令。这不是万无一失的,因为你可能会传递指令中间的地址,甚至是非代码的东西。
所以是的,如果正确调用函数,测试应该总是成功。
这两个例程大概是串联使用的。首先,您获得CALL指令的地址,然后该站点的代码将替换为JMP($ E9)。