一、基本文件格式
参考博客:llvm 文件转换图
.c文件,c语言源代码。.bc文件,llvm字节码的二进制形式(binary code)。.ll文件,llvm字节码的文本形式。.s文件,机器汇编代码。.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)。










![[手写OS]动手实现一个OS 之 准备工作以及引导扇区](https://img-blog.csdnimg.cn/47fcc8f7c9bb47998cf47105c8f475df.png#pic_center)








