LLVM CFG控制流图可视化

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 # 生成图片

控制流图如下:

猜你喜欢

转载自blog.csdn.net/weixin_46222091/article/details/105420409