相关疑难解决方法(0)

从注入的DLL中挂接DirectX EndScene

我想绕过EndScene任意DirectX 9应用程序来创建一个小的叠加层.例如,您可以采用FRAPS的帧计数器覆盖,激活后会在游戏中显示.

我知道以下方法:

  1. 创建一个新的d3d9.dll,然后将其复制到游戏路径.由于首先搜索当前文件夹,然后转到system32等,我的修改后的DLL会被加载,执行我的附加代码.

    缺点:你必须在开始游戏之前把它放在那里.

    • 与第一种方法相同,但直接替换system32中的DLL.

    缺点:您无法添加游戏特定代码.您不能排除不希望加载DLL的应用程序.

    • 使用IDA Pro 4.9 Free等工具直接从DLL获取EndScene偏移量.由于DLL按原样加载,您可以将此偏移量添加到DLL起始地址,当它映射到游戏时,获取实际偏移量,然后将其挂钩.

    缺点:每个系统的偏移量都不相同.

    • 挂钩Direct3DCreate9以获取D3D9,然后挂钩D3D9-> CreateDevice以获取设备指针,然后通过虚拟表挂钩Device-> EndScene.

    缺点:当进程已经运行时,无法注入DLL.您必须使用CREATE_SUSPENDED标志启动进程以挂接初始Direct3DCreate9.

    • 一旦注入DLL,就在新窗口中创建新设备.然后,EndScene从该设备获取偏移量并将其挂钩,从而导致游戏使用的设备挂钩.

    缺点:从我读过的一些信息来看,创建第二个设备可能会干扰现有设备,并且可能会出现窗口与全屏模式等错误.

    • 与第三种方法相同.但是,您将进行模式扫描EndScene.

    缺点:看起来不那么可靠.

如何挂钩EndScene注入的DLL,可以在游戏运行时加载,而不必在其他系统上处理不同的d3d9.dll,并使用可靠的方法?例如,FRAPS如何执行它的DirectX挂钩?DLL不应该适用于所有游戏,只适用于我通过注入它的特定进程CreateRemoteThread.

c++ directx hook dll-injection

31
推荐指数
3
解决办法
5万
查看次数

如何在Windows游戏上叠加图形?

我希望我的程序能够启动任何Windows游戏,当用户正在播放时,间歇性地在游戏窗口的某些部分显示一些文本或图片.游戏可以是窗口模式或全屏模式.从我从在线资源中可以看出,这可以使用支持叠加的图形库并使用Windows Hook来跟踪目标应用程序的窗口来完成.在这方面,我有一些问题.

  1. 叠加会影响游戏的性能吗?
  2. 如何挂钩应用程序会影响性能?
  3. 有没有其他方法可以实现这一目标?例如,您认为DirectX调试和分析工具PIX如何工作?

windows directx graphics overlay

10
推荐指数
1
解决办法
3万
查看次数

标签 统计

directx ×2

c++ ×1

dll-injection ×1

graphics ×1

hook ×1

overlay ×1

windows ×1