从0到1的ollvm (1)ndk与llvm pass调试环境搭建
最近在学习ollvm魔改的过程中,首先就被配环境困扰了好久现在就来总结一下
主要参考的是这位大佬的博客,照理来说跟着就可以了,这里补充自己的一些踩坑点
【清羽】Windows10下编译OLLVM-14.x_ollvm 编译优化后-CSDN博客
cmake,ninja用最新版的就好了
ollvm版本使用该大佬的
https://github.com/yangyiyu08/ollvm-project
gcc用visuial studio的会疯狂报错,必须使用llvm的clang工具
接着环境变量的设置,必须只保留llvm,将Visual studio的gcc删去
然后才能成功构建
1 | cmake -S llvm -B build -G Ninja -DLLVM_ENABLE_PROJECTS="clang" -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF -DLLVM_ENABLE_NEW_PASS_MANAGER=OFF |
编译好后,如果想直接添加ollvm混淆,又必须重新将Visual studio的gcc环境置顶,否则编译好的ollvm-clang将会无法编译
ollvm调用成功,且自己添加的pass部分也能执行
在android stdudio的环境也也能成功编译
使用参数说明
-fla
用于指令替换(instruction substitution)的Pass - `-mllvm -sub`: 激活指令替换 - `-mllvm -sub_loop=3`: 如果这个Pass被激活,则每个函数使用 3 次。默认值:1。1
2
3
4
5
6
7
8
9
用于控制流平坦化(control flow flattening)的Pass
- `-mllvm -fla`: 激活控制流平坦化
- `-mllvm -split`: 激活基本块分割。一起使用时可提高平坦度。
- `-mllvm -split_num=3`: 如果激活这个Pass,则在每个基本块上应用 3 次。默认值:1
2. ```
-sub-bcf
用于虚假控制流(bogus control flow)的Pass
-mllvm -bcf
: 激活虚假控制流-mllvm -bcf_loop=3
: 如果这个Pass被激活,则每个函数使用 3 次。默认值:1。-mllvm -bcf_prob=40
: 如果激活这个Pass,基本区块将以 40% 的概率被混淆。默认值:30%
- 标题: 从0到1的ollvm (1)ndk与llvm pass调试环境搭建
- 作者: 两只羊
- 创建于 : 2025-05-31 16:50:46
- 更新于 : 2025-06-01 12:53:02
- 链接: https://twogoat.github.io/2025/05/31/从0到1的ollvm-1-ndk与llvm-pass调试环境搭建/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论