Ubuntu18 下 ndk16b 与 ollvm 环境搭建-2020.05.04

1.获取最新版本 obfuscator-llvm 中的 4.0 版本

git  clone -b   llvm-4.0   https://github.com/obfuscator-llvm/obfuscator.git
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release  -DLLVM_INCLUDE_TESTS=OFF   ../obfuscator/
make -j7

2. 下载 linux 版 ndk

进入下载页:https://developer.android.google.cn/ndk/downloads/

如下载 android-ndk-r16b-linux-x86_64.zip

(不要下载最新的,最新的 ndK 头文件会缺失更多)

3. ndk 环境变量设置

unzip android-ndk-r16b-linux-x86_64.zip  

vim ~/.bashrc
export NDK_HOME=/home/lmhu/android-ndk/android-ndk-r16b/
export PATH=$NDK_HOME:$PATH

source ~/.bashrc

4. 拷贝 obfuscator-llvm 生成的可执行文件

进入 obfuscator-llvm 前面 make -j7 生成的 build/bin 目录下面 ,将 clang++ 、clang、clang-format、 clang-4.0、拷贝覆盖到 android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/bin(执行前可自行备份)。

5. ollvm 混淆指令

在 CMakeLists.txt 里的 SET(CMAKE_CXX_FLAGS 追加 -mllvm -fla 或在 Android.mk 中 CMAKE_C_FLAGS 增加相应 llvm 相关指令,然后重新编译项目。

注:使用 OLLVM  当前可用的标志有:
-mllvm -fla -mllvm -sub -mllvm -bcf
-fla : 控制流扁平化 (将程序的控制流图完全地扁平化)
-sub : 指令替换(对标准二进制运算(比如加、减、位运算)使用更复杂的指令序列进行功能等价替换)
-bcf : 虚假控制流 (在当前基本块之前添加一个基本块,来修改函数调用流程图)

6. 错误处理

编译时,缺少的头文件如:

在这里插入图片描述
toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/jni.h:27:10: fatal error: ‘stdarg.h’ file not found

在 ollvm 前面 make -j7 生成的目标目录下面,搜索 stdarg.h ,找到该文件的所在的目录,拷贝到 toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/ 下面

cp .../lib/clang/4.0.1/include/stdarg.h  .../android-ndk-r16b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include

同理:stddef.h、 __stddef_max_align_t.h、float.h 等文件,缺少什么文件就 拷贝什么文件,直到编译成功

参考文档

手把手编译 ollvm

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值