如何确定二进制文件中调用的函数?

时间:2013-10-15 16:46:48

标签: c++ c winapi reverse-engineering binaryfiles

答案不是“查看导入地址表”。

我希望对我生成的一些二进制文件进行一些分析,特别是为了更好地了解我正在使用的库和Windows API函数。我已经使用Dependency Walker来看一下这个,但是我做过的一些测试向我表明,可能会有很多额外的函数调用放入IAT,即使它们没有被调用。

我正在寻找的是确定调用哪些函数的方法......而不仅仅是IAT中的内容。

最好的方法可能是扭转它并查看所有'CALL',但我也不知道这样做的好方法。

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:1)

  1. 启动WinDbg(Windows的调试工具)
  2. 打开要分析的可执行文件。
  3. 运行以下命令

    • !logexts.loge
    • !logexts.logo e v(启用详细日志记录)
    • !logexts.logo e t(启用文本记录)
  4. 打开logviewer工具以及windows的调试工具来查看api, 默认日志路径是desktop \ logexts

答案 1 :(得分:1)

如果您使用link.exe链接二进制文件,请在链接时传递/ MAP标记。 这将生成一个MAP文件(binary.map)...它将具有使用的功能(不是所有功能)。

答案 2 :(得分:0)

我不知道这是否是“最好的方式”,但我同意你的建议,所有的CALL都给出了很好的概述。

使用“Ollydbg”调试器,您可以加载您的程序,转到您的过程的exe模块并右键单击 - >搜索 - >所有的模块间通话。

这为您提供了一个很好的可排序,可搜索的列表,列出了模块中出现的所有“CALL”,并指向其他模块。