LLVM初探

作者: 狗蛋的春天 | 来源:发表于2020-09-21 21:54 被阅读0次

LLVM是编译器相关

1、广义:前端+后端
2、狭义:后端

前端

  1、c/c++/oc开发的源码经过clang编译生成LLVM中间代码IR
  2、clang编译相比gcc更高效,速度更快,兼容更好
  3、我们写的源代码经过编译前段clang进行词法分析语法分析等一些基本操作生成中间代码

后端

  1、经过clang编译生成中间代码IR后,LLVM会接着经过一些优化,逐步生成最终的机器码(根据不同的架构x86,arm等)
  2、一般所说的LLVM就是编译后端,经过一些优化后生成的相对应的平台二进制。

------------分割线-----------

《实际查看编译过程》

  1、cd 到main.m所在项目的的目录中执行下面命令
     clang -ccc-print-phases main.m
  2、得到如下加载编译顺序,最终得到对应平台的可执行的代码
     0: input, "main.m", objective-c //找到程序入口.m文件
     1: preprocessor, {0}, objective-c-cpp-output //预处理器preprocessor 把我们写的代码中的宏定义、匿名分类(扩展)等进行对应转换。
     2: compiler, {1}, ir //编译器编译compiler  成中间代码IR
     3: backend, {2}, assembler //编译器后端 汇编
     4: assembler, {3}, object //生成目标代码
     5: linker, {4}, image //链接动态库
     6: bind-arch, "x86_64", {5}, image //生成对应结构的代码

《查看预处理preprocessor的结果》

1、cd到main.m所在目录执行 clang -E main.m得到
int main(int argc, char * argv[]) {
NSString * appDelegateClassName;
int a = 10;
int b = 20;
int c = a + b + 100;

@autoreleasepool {

    appDelegateClassName = NSStringFromClass([AppDelegate class]);
}
return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}

文中对应的main.m

/*
  定义宏,进行预处理preprocessor查看结果(把Maco=100替换到了文中)
*/
  #import <UIKit/UIKit.h>
  #import "AppDelegate.h"

  #define Maco 100

  int main(int argc, char * argv[]) {
  NSString * appDelegateClassName;
  int a = 10;
  int b = 20;
  int c = a + b + Maco;

  @autoreleasepool {
      // Setup code that might create autoreleased objects goes here.
      appDelegateClassName = NSStringFromClass([AppDelegate class]);
  }
    return UIApplicationMain(argc, argv, nil, appDelegateClassName);
  }

相关文章

  • LLVM初探

    编译 想必都知道,那么LLVM是什么?LLVM是一种编译器!LLVM编译流程是怎么样的?本篇就LLVM进行初探 首...

  • LLVM初探

    LLVM是编译器相关 1、广义:前端+后端2、狭义:后端 前端 后端 ------------分割线-------...

  • LLVM 之 初探

    一、编译器概述 编译器就是说将高级语言 翻译 为低级语言的程序。 二、LLVM概述   LLVM 是 构架编译器 ...

  • LLVM学习资料汇总

    1. 编译器架构的王者 LLVM 2. 初探LLVM JIT: 一个最小的JIT的例子 3. 为什么人人都该懂点L...

  • iOS-LLVM初探

    前言   计算机是只能直接理解机器语言,而不能直接理解高级语言的,所以计算机要执行高级语言编写的程序,就必须要把高...

  • LLVM

    LLVM 什么是LLVM? 官网:https://llvm.org/ The LLVM Project is a ...

  • iOS_LLVM

    LLVM 官网:https://llvm.org/[https://llvm.org/] The LLVM Pro...

  • iOS 逆向 day 18 GCC LLVM Clang

    一、LLVM 1. 什么是 LLVM 官网:https://llvm.org/ The LLVM Project ...

  • 浅谈LLVM

    何为LLVM 在LLVM的官网(https://llvm.org/[https://llvm.org/])中写到T...

  • iOS逆向-day10:LLVM 编译器

    一、LLVM的简单介绍 1.1、什么是LLVM官网:https://llvm.org/LLVM官网解释:The L...

网友评论

    本文标题:LLVM初探

    本文链接:https://www.haomeiwen.com/subject/tibbyktx.html