试图挂钩D3D EndScene

时间:2016-04-09 15:27:50

标签: c++ directx detours

所以我一直在玩C ++并注入DLL,相对较新,但学习速度相当快。我试图挂钩EndScene并且无法使其正常工作。我尝试使用模式扫描查找然后将其挂钩,我尝试创建虚拟d3d设备并通过其VTable查找EndScene。每次失败时我都会收到访问冲突,所以我只能假设我的功能地址错误,或者我可能完全错过了某些内容。我尝试了很多不同的方法,但由于知识有限,需要更多的帮助。

DWORD dEndScene = 0x10066D50;
HMODULE hBaseAddress = GetModuleHandle("d3d9.dll");

BYTE* pEndFunction = (BYTE*)reinterpret_cast<uintptr_t>(hBaseAddress);
pEndFunction = pEndFunction + dEndScene;

fEndScene = (oEndScene)DetourFunction(pEndFunction, (PBYTE)EndScene);

1 个答案:

答案 0 :(得分:0)

vtable可能是写保护的。您可以使用VirtualProtect

一些略有不同的方法:

是否可以在创建之前替换Direct3DCreate9(Ex)?然后你只需要为你想要的接口制作代理对象,然后可以正常委托,在之前/之后做一些事情,或者做一些完全不同的事情。

或者,如果您可以获取IDirect3DDevice9实例指针,则通过编辑它引用的vtable(再次使用VirtualProtect,但避免需要事先知道函数的位置,这可能会在各种情况下发生变化)。