我需要从经典的 win32 exe/dll 文件中提取代码(但不是数据!)。很明显,我不能仅通过提取代码段内容来做到这一点(因为代码段还包含数据——例如跳转表),我需要编译器的一些帮助。
*.map 文件很好,但它们只包含函数的地址,即我能做的最安全的事情是从该地址开始并处理直到第一个返回/跳转指令(因为函数的一部分可以被提及数据)
*.pdb 文件更好,但我不确定使用什么工具来提取这样的信息——我查看了 DbgHelp 和 DIA SDK,后者似乎是正确的工具,但它不是看起来很简单。所以我的问题/问题:
- 据您所知,是否可以仅通过 DbgHelp 提取有关代码/数据位置(地址 + 长度)的信息?
- 如果 DIA SDK 是唯一的方式,知道我应该调用什么来获取这样的信息吗? (COM 的东西很重)
- 还有其他办法吗?
当然,我首先关心的是 Visual Studio、C/C++ 源代码编译。
感谢任何提示。
最佳答案
有一个PDB extractor在此处的页面下载:http://undocumented.rawol.com .当您使用/type 选项时,它可以提取所有信息。这里还有一篇关于 PDB 查看器的文章:http://www.codeproject.com/KB/bugs/PdbParser.aspx但它提取的信息较少。
这两个实用程序都带有源代码。
关于windows - 从 exe/pdb 获取有关可执行代码的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/970443/