【LLVM】基本文件格式和 CFG 生成指令

一、基本文件格式

参考博客:llvm 文件转换图

  1. .c 文件,C语言源代码。
  2. .bc 文件,llvm字节码的二进制形式(binary code)。
  3. .ll 文件,llvm字节码的文本形式。
  4. .s 文件,机器汇编代码。
  5. .out 文件,可执行的二进制文件。

在这里插入图片描述
一般 C 语言编译器( gcc 或 clang )执行后直接将源码.c变为可执行二进制文件.out
clang 是 llvm 的前端,若我们需要得到 llvm 字节码,之后再对字节码做一些操作,可以用 clang -emit-llvm -c 指令,得到 .bc 文件。
若需要将字节码转为文本,使用 llvm-dis.bc 转为 .ll;相反的操作是 llvm-as
llc 指令将字节码转为汇编代码,llc 是 llvm 的后端,所谓后端指的是与某种指令集相关的部分,如 ARM、x86 等。

二、生成 CFG

方法一

clang -c -emit-llvm xxx.c -o xxx.bc
opt --view-cfg xxx.bc

这种方式产生的 dot 文件在 /tmp/…dot 文件夹下。

方法二

llvm-dis xxx.bc
opt -dot-cfg xxx.ll

这种方式产生的 dot 文件在当前目录下,但为隐藏文件,需要 ls -a 展示,如 .main.dot

以上方式产生的都是内部 CFG(intra CFG)。

三、生成 png

dot cfg.dot -Tpng -o cfg.png

猜你喜欢

转载自blog.csdn.net/weixin_45651194/article/details/129394703
cfg