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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值