windows编译ollvm笔记

准备工作

1.找到Android SDK目录配置好cmake环境变量 E:\AndroidSDK\cmake\3.18.1(E:\AndroidSDK为 Android SDK目录地址)。

  1. 下载llvm-mingw编译环境(gcc编译器的windows版本,即可以在windows平台上使用gcc编译器),下载地址:https://github.com/mstorsjo/llvm-mingw/releases 选择最新版本,根据系统环境不一样选择自己需要的版本,我电脑是win10下载的是llvm-mingw-20230130-msvcrt-x86_64.zip,下载完后进入bin目录配置好环境变量。

在这里插入图片描述

3.编译代码下载,下载地址:https://github.com/heroims/obfuscator/tree/llvm-9.0.1 下载llvm编译的代码(分支9.0.1 这个是编译成功的版本,其它还没有测试)。

最后执行命令
mkdir build
cd build
cmake.exe -G “MinGW Makefiles” -DCMAKE_BUILD_TYPE=Release …
mingw32=make
mingw32-make install

注意这里安装完成了,会在你的C:\Program Files (x86)\LLVM这个目录下去找
bin文件夹中的clang.exe clang++.exe clang-format.exe 复制到ndk你的ndk目录下的\toolchains\llvm\prebuilt\windows-x86_64\bin文件夹下,覆盖目标文件

将编译后的build\lib\clang\9.0.1\include文件夹中的__stddef_max_align_t.h stddef.h stdarg.h float.h 复制到ndk的21.1.6352462\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include文件夹下

最后在你项目的CMakeLists.txt文件里面添加如下代码
set(CMAKE_C_FLAGS_RELEASE “KaTeX parse error: Double subscript at position 9: {CMAKE_C_̲FLAGS_RELEASE} …{CMAKE_CXX_FLAGS_RELEASE} -mllvm -fla -mllvm -split -mllvm -split_num=3 -mllvm -sub -mllvm -sub_loop=3 -mllvm -bcf -mllvm -bcf_prob=40 -mllvm -sobf”)

set(CMAKE_C_FLAGS_DEBUG “KaTeX parse error: Double subscript at position 9: {CMAKE_C_̲FLAGS_DEBUG} -m…{CMAKE_CXX_FLAGS_DEBUG} -mllvm -fla -mllvm -split -mllvm -split_num=3 -mllvm -sub -mllvm -sub_loop=3 -mllvm -bcf -mllvm -bcf_prob=40 -mllvm -sobf”)

上面的代码解释如下
只使用控制流扁平化: -mllvm -fla
只使用指令替换: -mllvm -sub
只使用虚假控制流程: -mllvm -bcf

-mllvm -fla:激活控制流扁平化
-mllvm -split:激活基本块分割。在一起使用时改善展平。
-mllvm -split_num=3:如果激活了传递,则在每个基本块上应用3次。默认值:1

-mllvm -sub:激活指令替换
-mllvm -sub_loop=3:如果激活了传递,则在函数上应用3次。默认值:1

-mllvm -bcf:激活虚假控制流程
-mllvm -bcf_loop=3:如果激活了传递,则在函数上应用3次。默认值:1
-mllvm -bcf_prob=40:如果激活了传递,基本块将以40%的概率进行模糊处理。默认值:30

-mllvm -sobf 开启字符串混淆
-mllvm -seed=0xdeadbeaf 指定随机数种子生成器

注意
1.添加字符串混淆有的情况会崩溃,如果发现崩溃,对混淆要求不严格的话,可以去掉字符串混淆
2.当报错说找不到某个.h文件的时候,别慌,其实文件都在,只是路径找不到了,具体解决步骤如下
经第一步覆盖后,打开AS编译项目会报找不到 libunwind 等库的错,原因就是缺少lib/clang/…这些库
其实这些库 NDK 里面已经存在,只是路径不对,ctrl c+v就能解决了
在这里插入图片描述
然后还要修改下clang的版本
将 lib64 里的 clang 复制到 lib 目录后,还需要注意一个细节,就是 clang 的版本。
我的最新 NDK 里的 clang 版本是14.0.1(不知道哪来的14.0.1,官方也就14.0.0)
因此需要重命名一下版本文件夹,版本相同的可以忽略,如下图:
在这里插入图片描述

感谢参考文章
https://www.cnblogs.com/blogzhangwei/p/17218016.html
https://blog.csdn.net/qq_41923691/article/details/123258565

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值