答案不是“查看导入地址表”。
我希望对我正在生成的一些二进制文件进行一些分析,特别是为了更好地了解我正在使用哪些库和 Windows API 函数。我已经使用 Dependency Walker 来查看这一点,但我所做的一些测试表明,IAT 中可能有很多额外的函数调用,即使它们没有被调用。
我正在寻找的是一种确定正在调用哪些函数的方法......而不仅仅是放在 IAT 中的内容。
最好的方法可能是扭转它并查看所有的'CALL',但我也不知道这样做的好方法。
做这个的最好方式是什么?
答案不是“查看导入地址表”。
我希望对我正在生成的一些二进制文件进行一些分析,特别是为了更好地了解我正在使用哪些库和 Windows API 函数。我已经使用 Dependency Walker 来查看这一点,但我所做的一些测试表明,IAT 中可能有很多额外的函数调用,即使它们没有被调用。
我正在寻找的是一种确定正在调用哪些函数的方法......而不仅仅是放在 IAT 中的内容。
最好的方法可能是扭转它并查看所有的'CALL',但我也不知道这样做的好方法。
做这个的最好方式是什么?
如果您使用 link.exe 链接二进制文件,请在链接时传递 /MAP 标志。这将生成一个 MAP 文件(binary.map)...它将具有使用的功能(不是所有功能)。
运行以下命令
打开logviewer工具自带的windows调试工具查看api的,默认日志路径为desktop\logexts
我不知道这是否是“最佳方式”,但我有点同意你的建议,即所有 CALL 都提供了一个很好的概述。
使用“Ollydbg”调试器,您可以加载程序,进入进程的 exe 模块并右键单击 -> 搜索 -> 所有模块间调用。
这为您提供了一个很好的可排序、可搜索的列表,其中列出了出现在您的模块中并通向其他模块的所有“CALL”。