从exe/pdb获取有关可执行代码的信息
问题描述:
我需要从经典的win32 exe/dll文件中提取代码(但不是数据!)。很明显,我只能通过提取代码段内容来做到这一点(因为代码段也包含数据 - 例如跳转表),而且我需要编译器的帮助。从exe/pdb获取有关可执行代码的信息
* .map文件很好,但它们只包含函数的地址,也就是说我能做的最安全的事情就是从那个地址开始直到第一次返回/跳转指令为止(因为函数的一部分可以提到数据)
* .pdb文件更好,但我不确定使用什么工具来提取这样的信息 - 我看了一下DbgHelp和DIA SDK,后者似乎是正确的工具,但它看起来不是很简单。所以我的问题:
- 据你所知,有可能只通过DbgHelp提取关于代码/数据位置(地址+长度)的信息?
- 如果DIA SDK是唯一的方法,那么我应该怎样称呼这些信息? (COM的东西很重)
- 有没有其他方法?
当然,我最关心的是关于Visual Studio,C/C++源代码编译。
感谢您的任何提示。
答
好吧,我只是碰巧看到前一天DIA is a lot easier to use from C#(链接到一个简单的程序源代码);另一个不断出现在我的谷歌搜索中的程序是PDB Cracker,它也有源代码,可能与您的预期应用程序更相关。
答
有一个PDB extractor可供下载的页面在这里:http://undocumented.rawol.com。它可以在使用/ type选项时提取所有信息。还有一篇文章使用PDB查看器:http://www.codeproject.com/KB/bugs/PdbParser.aspx,但它提取的信息较少。
这两个实用程序都附带源代码。