0%

LLVM CFG控制流图可视化

安装组件

1
sudo apt-get install -y graphviz-doc libgraphviz-dev graphviz

示例程序

1
2
3
4
5
6
7
8
9
10
11
12
/// file test.c
#include<stdio.h>

int x= 10;
int y = 11;
int main(){
int z = 12;
for(int i = 0; i < 10; i++){
z *= x * y;
}
return 0;
}

生成LLVM IR文件

1
clang -S -emit-llvm test.c -o test.ll

调用控制流图

1
opt -dot-callgraph test.ll  # 生成.dot文件

dot文件会在当前目录下生成,不同版本的llvm可能dot文件的名字可能稍有不同,我使用的版本产生的dot文件是callgraph.dot。使用以下命令生成图片:

1
dot callgraph.dot -Tpng -o callgraph.png

callgraph

函数控制流图

1
opt -dot-cfg test.ll

dot文件会在当前目录下生成,不同版本的llvm可能dot文件的名字可能稍有不同,我使用的版本产生的dot文件是cfg.main.dot。使用以下命令生成图片:

1
dot cfg.main.dot -Tpng -o cfg.main.png  # 生成图片

控制流图如下:

cfg.main

正在加载今日诗词....