试图用汇编绕行功能时出现问题

时间:2011-01-22 18:22:41

标签: c++ assembly detours

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

fixed

正确jmp新函数的地址,但之后崩溃了。当我在ollydbg中观看它为什么会崩溃时,会发生一些非常奇怪的事情。它会在没有做任何事情的情况下走过一些指令。我在调试器中看到push xxx的地方,不会修改堆栈。在我看到一个retn 4的东西将继续前进到函数之间的空间,填充int 3 s。有谁知道为什么会这样?

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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