iOS逆向及安全

iOS逆向开发(十一)- 初识LLVM

Posted on 2019-01-30,2 min read
封面图

1.LLVM架构
2.Clang
3.Clang与LLVM

LLVM架构

  • 不同的前端后端使用统一的中间代码LLVM Intermediate Representation (LLVM IR)
  • 如果需要支持一种新的编程语言,那么只需要实现一个新的前端
  • 如果需要支持一种新的硬件设备,那么只需要实现一个新的后端
  • 优化阶段是一个通用的阶段,它针对的是统一的LLVM IR,不论是支持新的编程语言,还是支持新的硬件设备,都不需要对优化阶段做修改
  • 相比之下,GCC的前端和后端没分得太开,前端后端耦合在了一起。所以GCC为了支持一门新的语言,或者为了支持一个新的目标平台,就
    变得特别困难
  • LLVM现在被作为实现各种静态和运行时编译语言的通用基础结构(GCC家族、Java、.NET、Python、Ruby、Scheme、Haskell、D等)

Clang

  • 什么是Clang?

LLVM项目的一个子项目
基于LLVM架构的C/C++/Objective-C编译器前端
官网:http://clang.llvm.org/

  • 相比于GCC,Clang具有如下优点

编译速度快:在某些平台上,Clang的编译速度显著的快过GCC(Debug模式下编译OC速度比GGC快3倍)
占用内存小:Clang生成的AST所占用的内存是GCC的五分之一左右
模块化设计:Clang采用基于库的模块化设计,易于 IDE 集成及其他用途的重用
诊断信息可读性强:在编译过程中,Clang 创建并保留了大量详细的元数据 (metadata),有利于调试和错误报告
设计清晰简单,容易理解,易于扩展增强

Clang与LLVM


下一篇: iOS逆向开发(十)- iOS签名机制→