指令级别的调用(依赖)图

Posted

技术标签:

【中文标题】指令级别的调用(依赖)图【英文标题】:Call (dependency) graph at the level of instruction 【发布时间】:2011-07-22 23:42:40 【问题描述】:

我想知道。考虑到此类指令对其他指令的依赖性,是否有我可以使用的工具(在 C 程序上)可以在程序中的指令级别生成调用图?类似于“依赖图”的东西,但在程序中的指令级别。我从 Cormen 新书的第 27 章中汲取了这个想法(例如,参见第 778 页),但如果已经有可用的工具,我什至不会尝试破解任何东西。 (如果需要,第 27 章在线here)。感谢您的帮助。

【问题讨论】:

你在做依赖分析吗?可能您需要进行拓扑排序。 boost 图形库具有图形生成功能和各种图形算法,包括拓扑排序。但它完全是 C++。 您可以转储程序的一些内部表示,例如来自 gcc,带有选项 -fdump-tree-all-fdump-rtl-all。部分文件会被转储到 SSA(单一分配形式)中,并且依赖关系将很容易查看。 【参考方案1】:

任何 C 语言优化编译器都应该进行这种控制流分析。

另一方面,我不知道从中获取图表有多么容易(在独立工具的意义上)

【讨论】:

【参考方案2】:

如果您从 Cormen/Rivest 书 778 页的图 27.2 中获得灵感,那么它不是通常意义上的调用图。 它是一个调用树,其中的节点是函数的执行实例,而不是函数本身。 它是程序特定执行的调用树,详细说明了每个实例中的变量信息和并行性信息。

要获得如此完整的调用树,您将不得不基本上跟踪整个执行过程。使用不同的参数,你会得到不同的踪迹。

如果您的总体目标更明确,可能会更容易提供帮助。

【讨论】:

以上是关于指令级别的调用(依赖)图的主要内容,如果未能解决你的问题,请参考以下文章

Pentium快速系统调用学习

Pentium快速系统调用学习

linux进程及作业管理

《Linux内核分析》第四周笔记 扒开系统调用的三层皮(上)

操作系统基础

扒开系统调用的三层皮