0

只是为了好玩,我正在尝试制作一个简单的绕道库,通过修改类的 vtable 来绕道成员函数以创建绕道。我有一些奇怪的行为。这是整个程序(我使用的是 MSVC++ 2010):

fixed

jmp正确地指向新函数的地址,但在那之后它崩溃了。当我在 ollydbg 中查看它为什么会崩溃时,会发生一些非常奇怪的事情。它会直接走过一些指令而不做任何事情。我在调试器中看到 apush xxx时,堆栈不会被修改。在我看到 aretn 4的地方,事物将继续前进,进入函数之间的空间,充满int 3s。有谁知道为什么会这样?

编辑:没关系,我找到了答案。

4

2 回答 2

0

发现了问题。事实证明,您必须从地址中减去 5 才能正确计算它,因为它不是指令末尾的相对地址,而是开头的相对地址。

于 2011-01-22T18:41:39.650 回答
0

对于 MSVC,Microsoft Research 有一个名为“Detours”的库: http ://research.microsoft.com/en-us/projects/detours/ 您可能想要使用它,因为它已经可用并且我认为 32 位版本是免费的。

于 2011-01-22T20:07:21.637 回答