ins*_*get 7 python graph control-flow
我知道有一些方法可以从源代码自动生成CFG(C ontrol F low G raph).但是,根据我的理解,这些方法给了我一个视觉图形 - 一个图像.我无法真正使用这样的图像进行任何计算.
因此我的问题是:有没有办法从源代码自动生成CFG,以便在一些数据结构或程序可解析的文件中将源代码返回给我?(理想情况下,我也希望能够访问CFG中每个节点/边缘的行号)
我将使用这个用于使用这样的CFG提取控制流路径以确定输入路径覆盖范围的项目(我将使用跟踪解决)
重要:我试图分析的代码是用python编写的; 我想用python执行分析
问:是否可以使用 llvm 基础设施以基本块的形式获取应用程序的控制流程图?
答:是的,给定一个 BasicBlock*,您可以像这样迭代 CFG 中的 pred/succ 块:
#include "llvm/Support/CFG.h"
for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
BasicBlock *OnePredecessor = *PI;
...
Run Code Online (Sandbox Code Playgroud)
对于后继者,s/pred/succ/
问:有没有办法查看应用程序的控制流程图。
答:是的,使用:analyze -print-cfg X.(bc|ll) 或:analyze -print-cfg-only X.(bc|ll)
这些将发出“点”文件,可以使用您可以在网上获得的 graphviz 工具集将其转换为各种图形格式。
http://lists.cs.uiuc.edu/pipermail/llvmdev/2005-June/004416.html 这向您展示了如何以编程方式提取 CFG 并使用辅助工具将 CFG 打印到控制台。
| 归档时间: |
|
| 查看次数: |
1726 次 |
| 最近记录: |