只是为了它的乐趣,我试图创建一个简单的绕行库,通过修改类的vtable来绕道成员函数来创建绕道。我有一些奇怪的行为。这是整个程序(我正在使用MSVC ++ 2010):
fixed
正确jmp
新函数的地址,但之后崩溃了。当我在ollydbg中观看它为什么会崩溃时,会发生一些非常奇怪的事情。它会在没有做任何事情的情况下走过一些指令。我在调试器中看到push xxx
的地方,不会修改堆栈。在我看到一个retn 4
的东西将继续前进到函数之间的空间,填充int 3
s。有谁知道为什么会这样?
答案 0 :(得分:0)
发现问题。事实证明你必须从地址中减去5来正确计算它,因为它不是从指令末尾开始的相对地址,而是从头开始。
答案 1 :(得分:0)
对于MSVC Microsoft Research有一个名为“Detours”的库: http://research.microsoft.com/en-us/projects/detours/ 您可能想要使用它,因为它已经可用,我认为32位版本是免费的。