找到了一种让任何程序运行在独立的 Nvidia dGPU 上的方法。但我需要一点帮助来完成注入

逆向工程 部件 dll 注射
2021-06-22 04:09:30

Nvidia Optimus 是我的一大难题。我刚买了一台新的笔记本电脑,它正在使用这种即时 gpu 切换废话。这意味着除非应用程序通过查询 GPU 的 3D 技术或 Directx 开始,否则它会使用集成的英特尔。这意味着许多应用程序不使用 GPU(即使您在 Nvidia 控制面板中指定它)。一些示例:如果您运行 WEI 评级或 dxdiag,或者在我的情况下.. xilisoft 视频转换器。这是一个程序,可以使用 GPU 来辅助视频编码的处理时间。然而,因为它在编码开始之前不会尝试访问 GPU.. 启用 GPU 辅助的选项是灰色的。令人抓狂。

所以,我在visual basic中做了一个非常简单的DLL来初始化directx。然后我在visual basic中创建了另一个程序......一个带有单个按钮的简单窗口。单击此按钮时,它会加载 dll 文件并运行向 Directx 发送初始化命令的函数。

通过运行“Nvidia Optimus GPU 状态查看器”以显示 dGPU 正在呈现哪些应用程序,我运行了我的简单程序。当然,它不会出现在查看器中。然后,当我按下按钮时,哇,它现在由 dGPU 渲染。

然而,这是我有限的编程知识结束的地方。这里的目标是当你有一个无法在 Nvidia 上运行的应用程序时,我希望它使用这个 dll。

 

DLL 注入:

我知道 DLL 注入 .. 但我不知道该怎么做。注入dll后..如何让程序调用启动directx进程的dll中的特定函数?

包装:

是否可以制作一个包装器/加载器来加载所需的应用程序,但在应用程序启动之前首先运行这个 directx 函数的代码......至少)。

部件:

也许我们可以在所需应用程序的入口点之后跳转到“代码洞穴”,然后加载 dll 并调用该函数。然后创建一个程序,该程序可以为任何所需的应用程序自动执行此操作。

无论如何,这就是我所在的地方。我会继续努力,但任何帮助将不胜感激。谢谢。

1个回答

在您的 DLL 中,您只需执行以下操作:

就这样!该库将在系统范围内注入,您在 DLL 中执行的所有代码都将在注入它的程序的上下文中执行。