首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Direct X 11游戏中挂钩Direct X Endscene

在Direct X 11游戏中挂钩Direct X Endscene
EN

Stack Overflow用户
提问于 2010-12-02 14:17:21
回答 1查看 1.7K关注 0票数 2

我必须在游戏中进行一些内存读取和一些注射。但是,为了避免竞争条件,我需要将ASM代码注入到endscene中。

在此之前,我使用了以下代码:

代码语言:javascript
复制
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设备,并使用反向偏移查找endscene。

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

你知道当DirectX 11正在使用的时候,我该如何在游戏的结束场景中执行一个钩子吗?

EN

回答 1

Stack Overflow用户

发布于 2010-12-02 19:10:06

您应该将GetProcAddress和对D3DCreate的调用挂起,捕获设备指针并从那里挂起VFTable。我不知道你是如何“反转”COM vftable偏移量的(这些偏移量是由如何构建的COM dll预定义的,你只需要对DX头文件中定义的虚方法进行计数,从0开始,然后乘以sizeof(INT_PTR)得到偏移量),但你读取它们的方式看起来也是错误的(你已经有了太多的间接地址)。

试着看看像MSDetours这样的东西,它有一个关于COM对象挂钩的例子。你也可以给this question一个通读

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4332248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档