我必须在游戏和注射中做一些记忆阅读。但是,为了避免竞争条件,我需要将我的ASM代码注入到endcene中。
以前我使用过这段代码:
uint D3D9_Device;
D3D9_Device = Memory.Read<uint>(Memory.BaseAddress + Direct3D9__Device);
D3D9_Device = Memory.Read<uint>(D3D9_Device + Direct3D9__Device__OffsetA);
D3D9_Device = Memory.Read<uint>(D3D9_Device);
D3D9_Device = Memory.Read<uint>(D3D9_Device + Direct3D9__Device__OffsetB);
要访问Dx9设备,并使用反向偏移找到endcene。
但是,在Windows 7中,强制使用directx 11,这意味着此读取失败并提供空对象。
在使用DirectX 11时,我是否知道如何在游戏的端点上执行操作?
答案 0 :(得分:0)
你应该是IAT挂钩GetProcAddress
并调用D3DCreate,捕获设备指针并从那里挂起VFTable。不知道你如何'颠倒'COM vftable偏移(这些是由COM dll构建的预定义,你只需要计算DX SDK头中定义的虚拟方法,从0开始,然后乘以sizeof(INT_PTR)
得到偏移),但你读它们的方式也是错误的(你有太多的间接)。
尝试查看MSDetours之类的内容,它有一个关于COM对象挂钩的示例。您也可以通过this question阅读