关于LLVM pass 的学习(1)-- 开发准备

前言:

纯粹为了学习,所以引用了很多人的资料,不是为了指导他人,只是记录这段时间的学习成果

一: 开发pass 前的准备

1: 获取LLVM源码

git clone [http://llvm.org/git/llvm.git](http://llvm.org/git/llvm.git)
git clone [http://llvm.org/git/clang.git](http://llvm.org/git/clang.git) llvm/tools/clang
git clone [http://llvm.org/git/clang-tools-extra.git](http://llvm.org/git/clang-tools-extra.git) llvm/tools/clang/tools/extra
git clone [http://llvm.org/git/compiler-rt.git](http://llvm.org/git/compiler-rt.git) llvm/projects/compiler-rt

或者也可以获取Ollvm 的源码
https://github.com/obfuscator-llvm/obfuscator
其他的还有交大维护的孤挺花(Armariris)项目
clone git@github.com:gossip-sjtu/Armariris.git
最好的选择是张总的Hikari 项目
https://github.com/HikariObfuscator/Hikari/releases

2:编译成xcode项目

mkdir build
cd build
// 使用编译器cmake 创建xcode 项目,项目地址在llvm目录下
cmake -G Xcode CMAKE_BUILD_TYPE="Debug" ../llvm
open LLVM.xcodeproj

其中ollvm的编译流程

mkdir obf
cd obf
clone [git@github.com](mailto:git@github.com):gossip-sjtu/Armariris.git
cmake -DCMAKE_BUILD_TYPE:String=Release ./Armariris
make -j4

3: pass 中结构划分
在LLVM中
Module: 程序的基本单位是模块(Module),比如一个.c或.cpp文件
Function: 函数是模块的基本组成单位,代表文件中的一个函数,所以一个Module由一个或多个函数组成。
BasicBlock: 函数的基本组成单位 (每个函数会被划分为一些block,它的划分标准是:
一个block只有一个入口和一个出口所以一个Function由一个或多个Basic Block组成)
Instructions: 指令是Basic Block的基本组成单位,所以一个Basic Block由一个或多个Instructions组成


关系图

二: 开发流程

1 我们需要继承指定的pass
比如:
struct functionObfuscation : public FunctionPass
2 实现其中的方法
virtual bool runOnFunction(Function &F)
3 需要将我们自己写的pass 注册
static RegisterPass<functionObfuscation> X(“funcobf", "Hello World Pass");
4 编译我们自己的pass称为动态库
opt -load path/to/LLVMPassDemo.dylib -funcobf -time-passes -disable-output test.bc
其中动态库就是存放编译后我们写的pass, funcobf选项就是指运行functionObfuscation这个pass

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 12,755评论 0 38
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 10,240评论 1 29
  • 学习了一段时间的LLVM后,难免需要对其做一个总结,同时准备下一阶段的学习工作——基于LLVM自定制代码混淆器。在...
    爱笑的云里看梦阅读 9,447评论 0 12
  • 原文链接:http://fighting300.com.... OLLVM简介 OLLVM(Obfuscator-...
    fighting300阅读 18,898评论 65 35
  • 五一节后,来跟大家分享一些思维导图技巧方面更精华的干货——思维提升。 首先,大家知道思维导图和思维之间的关系与区别...
    童楚涵阅读 198评论 0 0
  • 喜欢 大概就是眉眼间的欢喜吧
    SLiUmENgYuAn阅读 112评论 0 1
  • 像我这种从小不会写作文的人在灵感砸在自己头上的时候总是特别敏感。所以在这个拖延症结束的周末,本应该狂补毕业论文的晚...
    Samal_Wang阅读 383评论 0 0
  • 今天检查了儿子昨天做的试卷,错误好几处,都是粗心大意出的错,不是不好好读题,就是抄错了算式,甚至还有应用题列对了算...
    唯品赤玉阅读 33评论 0 0