对专有 GPU 设备驱动程序进行逆向工程?

逆向工程 二元分析 司机
2021-07-07 23:53:35

我有二进制文件,它的大小超过 200 MB,这让我觉得自己完成这样的任务是非常困难的。我正在尝试查看驱动程序如何与 GPU 准确通信(因为我需要为一个科学项目模拟 GPU),并且我至少需要一些关于 DX 和 OpenGL 如何在检查设备驱动程序的 GPU 端工作的想法. 它是 32 位和 64 位,它可以在 Windows 上运行,但这几乎不是问题,因为主要关心的是弄清楚它如何准确地发送数据/命令包,它们被发送到什么地址,它如何扫描 PCI/等,以及这如何在某种程度上帮助我更好地了解 GPU 的内部功能如何在没有任何文档的情况下工作。我知道这会很难,我会​​设法模拟我认为它会如何工作,并且只模仿我知道它是如何被访问的,并从那里开始工作。我在这里问是因为我需要这里的专业人士在这些主题上的帮助:

1.如何开始逆向工程这一层的东西?

2.我应该从这个过程中学到多少GPU的架构?

3.以某种方式管理模拟/模拟GPU的总体信息是否足够?

我 100% 是认真的,所以我希望得到一些至少能让我行动起来的答案。

1个回答

嗯……对这么大的软件进行逆向工程需要大量的意志、时间,当然还有技术知识。老实说,除非您正在考虑创办一家公司或提供驱动程序的开源/免费软件版本,否则您实际上是在浪费时间。特别是如果它是一个科学项目。

您必须记住,逆向工程不是一门精确的科学,因为制造商总是对他们的大部分技术保密。但是,如果您有足够的动力,就必须从了解目标技术的工作原理开始。这可以通过阅读可用手册和对平台(在本例中为 GPU)进行微基准测试来“部分”完成。不过我可以向您保证,手册中提供的大多数架构细节都不是 100% 准确的。最终,您的微基准测试结果中总会出现异常值。

由于您更关心 GPU/主机通信协议而不是 GPU 的架构方面,我建议您检查Ocelot它是一个针对 GPU 和 CPU 的开源模拟器,我相信它会是一个很好的信息来源。

要知道,如果您的目标是 nVidia 的 GPU,驱动程序不会做太多事情,而是将PTX代码加载到 GPU 的特定内存区域中,从那里读取和执行代码。有关更多信息,PTX请访问此链接