首先说一下llvm大体是什么 编译的过程根据与系统的相关性分为前端与后端: 前端工作与源语言有关而与机器无关。后端工作与机器有关。
大部分编译器或者平台都是使用自己的IR,这就导致不同的语言不同的平台会产生不同的前后端
LLVM则是一个很特殊的编译器框架,LLVM的核心是叫LLVM IR的中间表示,并以库的方式提供一系列接口,通过这种接口LLVM很容易和IDE集成。再加上llvm的各种功能模块,我们甚至可以开发字节的软件工具

llvm相关的pwn题一般都是llvm pass pwn,所以llvm pass是必须了解的部分 这里的pass是指“遍历一遍IR,可以同时对它做一些操作”,这种pass的实现是通过继承LLVM核心库中的Pass类,通过LLVM的编译器将它翻译得到的IR传入Pass里来进行需要的遍历和修改操作
[!NOTE] Title pass是一种编译器开发的结构化技术,用于完成编译对象(如IR)的转换、分析或优化等功能。pass的执行就是编译器对编译对象进行转换、分析和优化的过程,pass构建了这些过程所需要的分析结果。
这是一个在IR级别做程序优化的工具,输入和输出都是同一类型的LLVM IR,很好理解,做优化不必要修改文件格式。设计编译器的同学会经常性的调用这个工具来验证自己的优化pass是否正确。
BTW,反过来,优化pass不一定作用于LLVM IR,比如作用于后端的MI,这时opt是不能使用的。