LLVM学习

LLVM是一系列编译器和工具链技术的集合,模块化,可重用.
专门为编程语言编写的程序编译时,链接时,运行时优化而设计.
传统编译器分为前端、优化器、后端
前端负责解析源代码,检查语法错误,将其翻译为抽象的语法树
优化器对这一中间代码进行优化,试图使代码更高效
后端将优化后的中间代码转为目标机器代码,最大化利用目标机器的特殊指令,提高代码性能
前端解析器  +   IR生成器  + LLVM后端
LLVM是编译器工具链技术的一个集合,其中lld项目是内置链接器,编译器将每个文件编译成Mach-O,链接器会将项目多个Mach-O文件合并成一个
目前xcode的前端使用  Clang 
iOS系统编译主要过程:
   1.你写好代码后,LLVM会进行预处理,如把宏嵌入对应位置
   2.预处理完后,LLVM会对代码进行词法分析和语法分析,生成AST.AST是抽象语法树,结构上比代码更精简,遍历起来更快
    语义分析,生成中间代码IR,可以是 text型,Memory型,bitcode二进制格式
   Clang是一个开源库,LibClang   LibTooling
Clang编译原理   源代码 -> 词法分析 -> Token -语法分析 ->AST语法树  -> 语义分析 -> 生成IR代码   ->Pass优化  -> LLVM Bitcode 生成字节码  ->汇编代码 -> 链接器 Linker  -> 目标文件
LibClang  LibTooling  可以来开发新的语法树 , 实现 OC  转  JS   Swift  
也可以通过修改语法树 ,才进行静态打点,也可以做到无侵入
滴滴  DynamicCocoa  企鹅 直接做了个编译器  OCS  来实现iOS动态化  
《DynamicCocoa:滴滴 iOS 动态化方案的诞生与起航》  《OCS——史上最疯狂的iOS动态化方案》
编写Pass   来实现代码混淆
   参考:   https://blog.csdn.net/Deft_MKJing/article/details/84943381

 

你可能感兴趣的:(iOS)