LLVM CFG控制流图可视化
准备
安装必要组件
sudo apt-get install -y graphviz-doc libgraphviz-dev graphviz
示例程序
/// file 1.c
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 文件
clang -S -emit-llvm 1.c -o 1.ll
调用的控制流图
opt -dot-callgraph 1.ll # 生成dot文件
dot文件会在当前目录下生成,不同版本的llvm可能dot文件的名字可能稍有不同,我使用的版本产生的dot文件是callgraph.dot
。使用以下命令生成图片:
dot callgraph.dot -Tpng -o callgraph.png # 生成图片
控制流图如下:
函数控制流图
opt -dot-cfg 1.ll # 生成dot文件
dot文件会在当前目录下生成,不同版本的llvm可能dot文件的名字可能稍有不同,我使用的版本产生的dot文件是cfg.main.dot
。使用以下命令生成图片:
dot cfg.main.dot -Tpng -o cfg.main.png # 生成图片
控制流图如下: