【问题标题】:Hooking Direct X Endscene in Direct X 11 game在 Direct X 11 游戏中挂钩 Direct X Endscene
【发布时间】:2010-12-02 06:17:20
【问题描述】:

我必须在游戏中进行一些记忆阅读和一些注射。但是,为了避免竞争条件,我需要将我的 ASM 代码注入到结束场景中。

以前我用过这段代码:

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 设备,并使用反向偏移找到结束场景。

但是,在 windows 7 中,directx 11 是强制的,这意味着这个读取失败并给出一个空对象。

知道在使用 DirectX 11 时如何在游戏的结尾处执行挂钩吗?

【问题讨论】:

    标签: c# assemblies code-injection


    【解决方案1】:

    您应该是 IAT 挂钩 GetProcAddress 并调用 D3DCreate,捕获设备指针并从那里挂钩 VFTable。不知道您如何“反转” COM vftable 偏移量(这些是由 COM dll 的构建方式预定义的,您只需计算 DX SDK 标头中定义的虚拟方法,从 0 开始,然后乘以 sizeof(INT_PTR) 即可获得偏移量),但是您阅读它们的方式看起来也很错误(您有太多的间接方式)。

    尝试查看MSDetours 之类的内容,它有一个关于 COM 对象挂钩的示例。你也可以给this question 通读一遍

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      相关资源
      最近更新 更多