LLVM学习笔记-Clang和SwiftC常用指令使用

最近开始研究代码混淆这反面的东西,发现混淆最好的地方是在编译过程中。这样不会影响正常的业务开发,对源码无侵害。顾开始学习LLVM,当然主要学习的是LLVM的Pass层。
对LLVM不太清楚的可以看看关于LLVM,这些东西你必须知道!

提示:在使用clang编译源代码时,可能会报找不到头文件错误,这是因为系统的/usr/include目录缺失,在源代码预编译的时候,#include替换成成/usr/include目录文件路径。如何安装呢? 命令行输入

1
xcode-select --install

指令即可。如果usr目录下还没有include文件,就将Xcode安装好的include文件链接到usr目录下。在命令行执行

1
sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14(*这里更加自己目录下的版本自行修改).sdk/usr/include /usr/include

Clang指令(编译C,C++,Objective-C等源码), (clang -help)

  • 源代码生成IR文件
1
clang -emit-llvm main.c -S -o main.ll
  • 源代码生成字节码文件(bitCode)
1
clang -emit-llvm main.c -c -o main.bc
  • 将IR文件转化成BitCode格式文件
1
llvm-as main.ll -o main.bc
  • 源代码生成汇编文件
1
clang main.c -S -o main.s
  • 将BitCode文件转化成汇编文件
1
llc main.bc -o main.s
  • 源代码生成目标文件
1
clang main.c -o main.o
  • 源代码生成可执行文件
1
clang main.c -o main
  • 目标文件生成可执行文件
1
clang main.o -o main

Swiftc指令(编译Swift文件). (swiftc -help)

  • 生成语法数
1
swiftc -dump-ast main.swift
  • 生成Swift IL(SIL)
1
swiftc -emit-sil main.swift
  • 生成LLVM IR
1
swiftc -emit-ir main.swift (-o main.ll 生成IR文件)
  • 生成汇编
1
swiftc -emit-assembly main.swift (-o main.s 生成汇编文件)
  • 生成可执行文件
1
swiftc main.swift -o main