获取正在运行的可执行文件中的函数列表(包括非导出函数!)

逆向工程 视窗 聚乙烯 修补
2021-07-05 03:26:08

我正在开发本机二进制补丁库。它目前适用于 Linux,我正在尝试添加 Windows 支持。

为此,我需要实现一种方法来枚举 PE 二进制文件 (EXE) 或共享库 (DLL) 中的所有函数。对于库,迭代导出的函数就足够了。

但是,我需要一种方法来获取正在运行的可执行文件中的函数列表以及我可以调用的地址。

在 Linux 上,我用过libelf这个,但我不知道 PE 用什么。

目标可执行文件未剥离,但没有源代码。

1个回答

在 Windows 上,未剥离的可执行文件可能有一个IMAGE_DIRECTORY_ENTRY_DEBUG目录。您可以在此处了解有关 PE 格式的更多信息

遗憾的是,该目录仅包含有关相应元数据(.pdb文件)所在位置的信息与可执行文件/库一起编译时可能会生成 pdb。

一个pdb文件由不同的Streams组成您最有可能对Global Symbol Stream.

我建议尝试任何.pdb解析器(我认为没有完整的实现)来解析它。(一定要通过 翻译地址OMAP stream)。