最近开始研究代码混淆这反面的东西,发现混淆最好的地方是在编译过程中。这样不会影响正常的业务开发,对源码无侵害。顾开始学习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 |