生成呼叫流程图的工具 [C C++ Solaris Linux]

3
我非常喜欢IDA,但是在这个项目中我正在使用Solaris操作系统。我有一台Linux机器,如果没有与IDA同等级别的工具,我会说服管理层购买许可证。
除此之外,我正在寻找其他替代方案。IDA中的一些其他功能很方便,但目前我最需要的是一个基于调用流程图生成器基于源代码。如果它需要额外的构建步骤输出,那也没关系,但我需要查看的一些库没有源代码。
到目前为止,看起来我的最佳选择是Valgrind的Callgrindlidagprof。欢迎提出更多建议。

关于gprof,Windriver提供给我们的GNU编译器集缺少一些通常由GNU编译器提供的库,其中包括用于分析的工具。这是一个更普遍问题的好解决方案,但现在我选择先尝试其他解决方案。

编辑 一些Rational工具(Purify、Quantify等)可能也很适合这个问题。我和IDA一样对此感到困惑,但我觉得有人可能会通过谷歌搜索找到这个建议。

编辑2 Valgrind没有移植到solaris/sparc平台;p


那么,我猜想带有graphviz插件的doxygen不行了? - Judge Maygarden
是的,OP提到生成器不应该基于源代码。 - user500944
@Judge - 我正在尝试在一些我没有源代码的库上生成调用流程图。我对doxygen/graphviz不够熟悉,但如果它们可以使用二进制文件的反汇编进行工作,那么可能会起作用。 - Brian Vandenberg
1
不,Doxygen非常需要源代码,但它确实可以生成漂亮的调用图表。 - Judge Maygarden
3个回答

3
请查看ERESI项目。它是一个逆向工程框架,有一个名为ELFsh的工具,可以从机器码生成CFG。它还没有稳定/最终版本,但值得一试。
如果您想尝试它: - 下载并安装(在Ubuntu上使用apt-get) - 运行elfsh32。您将进入一个shell。 - 加载您的二进制文件:load /bin/bash - 分析它:analyse - 生成图形:graph 您将获得.dot格式的图形和呈现的PNG(这个图太大了,无法在此处发布)。

2

你可以使用 Gprof 生成调用图。它可以使用 Kprof 进行可视化。


很抱歉没有提到这一点,我会进行编辑以弥补。我尝试了gprof,但是我正在使用的编译器集有些受限,因为Windriver没有提供构建可分析应用程序所需的某些库。目标文件已经构建完成,但缺少一些crt库等内容。我尝试提供其他满足依赖关系的crt库,但gprof以简洁而神秘的错误退出。也许我应该更耐心地处理它,但我选择寻找其他解决方案,而不是打那匹马。 - Brian Vandenberg
+1 因为这是解决更普遍问题的好建议,即使它不完全符合我的需求。 - Brian Vandenberg

1

虽然回答有些晚,但仍然可能有用。在Solaris上,您可以使用collect

  • collect your_program your_args...
  • 它将生成一个名为test.1.er的目录
  • 然后您可以使用er_print -calltree test.1.er在控制台上可视化调用图
  • 或者使用analyser在X-Window上进行

+1 这是一个不错的方法,但需要注意的是您必须安装Sun Studio,并使用适当的参数编译程序以仪器化进程。 - Brian Vandenberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接