Visual studio 返回时dll钩子未正确更新调用堆栈

Visual studio 返回时dll钩子未正确更新调用堆栈,visual-studio,dll,hook,inject,directx-9,Visual Studio,Dll,Hook,Inject,Directx 9,我按照创建蹦床的过程来钩住一个dll函数(在我的例子中是来自d3d9.dll的Direct3DCreate9),如下所述:和 我的代码略有不同,因为我使用反汇编程序手动计算偏移字节,而不是使用hde32_disasm函数 一切似乎都很正常,受害者进程调用我注入的dll包装函数,新函数做一些事情,然后调用原始函数(Direct3DCreate9),一旦原始函数返回,包装器应该在返回受害者进程之前调用其他一些东西 不幸的是,当从钩子包装器调用原始函数时,它返回到受害应用程序,而不是钩子包装器,这意味

我按照创建蹦床的过程来钩住一个dll函数(在我的例子中是来自d3d9.dll的Direct3DCreate9),如下所述:和

我的代码略有不同,因为我使用反汇编程序手动计算偏移字节,而不是使用hde32_disasm函数

一切似乎都很正常,受害者进程调用我注入的dll包装函数,新函数做一些事情,然后调用原始函数(Direct3DCreate9),一旦原始函数返回,包装器应该在返回受害者进程之前调用其他一些东西

不幸的是,当从钩子包装器调用原始函数时,它返回到受害应用程序,而不是钩子包装器,这意味着它遗漏了包装器中的一些代码

完成反汇编后,调用堆栈看起来好像被覆盖了,因此当Direct3DCreate9返回时,它会弹出回受害者应用程序,而不是发出调用的我的钩子函数

我猜我需要手动将钩子函数推到调用堆栈上?我该怎么办


其他可能相关的信息:受害者进程和钩子都是在调试模式下构建的。DICT3DCDRATE9是一个Y-STDCALL,我使用VS2010作为钩子DLL,但是受害者进程是用VS2015编译的。

< P>它发现调用堆栈是由英伟达图形驱动程序NVD3D9WRAP.DLL来处理的。这个dll被注入d3d9应用程序的方式与我尝试的方式相同。这导致了原始帖子中解释的疯狂

解决方案是在Windows中打开设备管理器,禁用英伟达图形驱动程序。谢天谢地,我的电脑有一个集成的图形芯片,所以我能够使用它