• 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

  • 相关阅读:
    mapreduce-maven--30.串联所有单词的字串
    generate by chatgpt:应用上线前的checkList(部分是我自己的回答)
    希尔排序C#
    大规模数据分析统一引擎Spark最新版本3.3.0入门实战
    从0开始刷力扣
    1. 认识复杂度和简单排序算法
    封闭的一个多月,老菜鸟的 机械手和AGV 自动搬运小项目总结
    跨境电商引流之Reddit营销,入门保姆级攻略
    三大排序(插入排序,选择排序,冒泡排序)
    Redis Stream 数据结构实现原理真的很强
  • 原文地址:https://blog.csdn.net/u010648159/article/details/133860690