【问题标题】:Get the control-flow graph in assembly获取汇编中的控制流图
【发布时间】:2014-08-18 14:18:25
【问题描述】:

我正在拼命寻找一种在汇编中获取控制流图的方法。我有用 C 编写的源代码,处理器是 x86。我已经查看了 gcc 的文档,它确实提供了仅 gimple 和 rtl 格式的 cfg。知道如何以汇编格式获取它吗?

【问题讨论】:

  • “获取汇编中的控制流图”是什么意思? CFG 是一组与动作相关的节点,以及这些节点之间的条件转移弧。装配不是 CFG。您到底在寻找什么,为什么要以这种形式出现?提供示例。
  • 我特别在寻找具有包含汇编代码的基本块的 CFG,而不是 gcc -fdump-tree-gimple 提供的 gimple 格式。类似于 (debasish.in/2014/02/…) 的输出,但静态基于高级源代码,而不是二进制的动态执行。
  • 简而言之,就是 GCC 生成的 .s 的 CFG。
  • 我假设(没有特定的 GCC 知识)RTL 仍然包含控制流信息。既然它可能包含抽象的、低级的机器操作,那为什么还不够呢?你没有回答你为什么想要这个。 (您总是可以解析 .s 文件,并从中构建控制流,模间接函数调用)。
  • 我想对一些开源程序的控制流图做一些分析,间接分支对我来说很重要。我根本无法将它们排除在控制流之外。

标签: gcc assembly x86 control-flow-graph


【解决方案1】:

如果您只需要查看程序的控制流程图,我建议您使用免费评估版Interactive Disassembler,通常称为 IDA。

如果您访问他们的网站,在屏幕截图部分会显示从二进制文件本身编译的方法的图形视图。

【讨论】:

  • 感谢您的回复。但是,我正在寻找基于源代码(自上而下)而不是二进制(逆向工程)的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 1970-01-01
  • 2012-12-14
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
相关资源
最近更新 更多