所以我知道 x86 机器语言和 C++/C 语言。在过去的几周里,我一直致力于学习 Windows 内部结构,尤其是 PE 格式。我的目标是检索古墓丽影黑暗天使的源代码文件。这是 10 年前(2003 年)发布的 3d 视频游戏,使用 C 和 C++ 语言编写。代码均使用 VC++ 6.0 和英特尔 C++ 7.1 编译。我试图从中猜测初始源代码的文件是 PE 格式的可执行文件,其中包含带有公共符号的 ProgramDataBase 文件 (v2.0)。它们的名称是 TRAOD、TRAOD_P3 和 TRAOD_P4(不包括文件扩展名(.exe.PDB),因为第一个是用 vc++ 编译的,另一个是用 ic++ 编译的,分别用于奔腾 3 和奔腾 4 目标处理器。
我使用 IDA Pro 打开可执行文件并映射 PDB 符号。然后我将机器指令翻译成它们的 C++ 等价物,并将它们放入一个大缓存文件中。然后我使用 dbh.exe 将函数映射到它们匹配的源文件中(因为 PDB 文件具有公共函数的源行信息)。但是在转到下一个函数之前,我正在使用包含该函数的 vc++ 或 ic++ 编译测试可执行文件,然后将结果与原始函数进行比较(我的意思是将与目标函数等效的机器代码与我的测试 exe 和游戏进行比较一)。但后来我认为这不是那么有效,因为没有考虑许多其他过程。我的意思是 PDB 文件包含比 dbh 程序转储和 PE 文件更多的信息。在有关 PE 文件格式的文章中,据说它与 .OBJ 非常相似,链接器使用这些文件生成 exe。那么浏览 .OBJ 文件然后猜测源代码还是只使用 exe 是更好的主意吗?我还读到要从 PE 生成 .OBJ 文件,您需要有一些符号,而我从 PDB 文件中获得了它们,所以我认为这种转换是可能的。另外,如果您对如何反编译这个游戏有任何其他想法,请分享它们 - 我真的很想实现这一点。来自 PE 的 OBJ 文件你需要有一些符号,而我从 PDB 文件中获得它们,所以我认为这种转换是可能的。另外,如果您对如何反编译这个游戏有任何其他想法,请分享它们 - 我真的很想实现这一点。来自 PE 的 OBJ 文件你需要有一些符号,而我从 PDB 文件中获得它们,所以我认为这种转换是可能的。另外,如果您对如何反编译这个游戏有任何其他想法,请分享它们 - 我真的很想实现这一点。
编辑:我也在搜索关于 .PDB 格式(v2.0)和关于 VC++ 6.0 生成的 .OBJ 和 .LIB 文件的文档。