0x01 Ollvm编译
- 系统: macos 10.15.6
git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/
make -j7
在之前的macos系统上,编译ollvm还是比较流畅的,整个过程也没出现任何error。自从升级了macos的版本,ollvm的编译就报错了。根据报错信息修改相应的文件即可,奈何C++太差了。请了notifybibi师傅帮忙了。
obfuscator/tools/clang/lib/CodeGen/CGOpenMPRuntime.cpp
报错文件位置,如不同,需自行修改
把三处注释掉就可以顺利编译出了。
ubuntu 16.04以及ubuntu 18.04可以直接进行编译,无任何报错,只不过需要关闭DEBUG。
0x02 Android Studio配置
- 方案online
- 在ndk/toolchains/下面新建编译链,把ollvm build下的文件拷贝进去,然后修改android.mk和setup.mk,这种方式已经过时了,android studio现在用的是cmake不合适这个方案。
- 拷贝ollvm中的clang、clang++、clang-format到llvm/prebuilt/darwin-x86_64的bin目录中,然而拷贝过后需要解决一大堆头文件not found问题。
- 我的解决方案,我采用了低版本的ndk,现在最新下载的ndk是21版本,下载ndk r16b版本,具体步骤:
-
preferences - - > Android sdk -- > SDK Tools -- > NDK(Side by side) --> 打开show package detail,然后勾选16就可以下载好了。
- 下载完成之后需要将项目配置成为ndk 16b编译。位置为File --> Project Structure -- > sdk location -- > Android Ndk Location 设置下载好的ndk 16b。
- 下一步需要修改rules.ninja,具体位置:
AndroidStudioProjects/项目名称/app/.cxx/cmake/debug/arm64-v8a
其中cmake下是分为debug和release,然后每个文件夹中是不同架构的编译规则。如果在编译的时候没有指定abiFilter,则会默认编译不同架构的,建议加一个abiFilter,位置在build.gradle(Module:app),
cmake{
cppFlags ""
}
ndk{
abiFilters "arm64-v8a"
}
这样就只会编译arm64版本的了,然后修改/app/.cxx/cmake/debug/arm64-v8a中的rule.ninja,找到其中的clang位置,修改为我们ollvm的clang位置,然后rebuild project,其中会有报错,找不到asm/types.h的位置,这时候需要将ndk sysroot中的aarch-linux-android中的asm文件夹拷贝到Sysroot下即可。
- ollvm flag选项在CMakeLists.txt中可以添加,也可以写在cppFlags中
set(CMAKE_CXX_FLAGS "-mllvm -fla")
-
另外的方法,替换clang。然后拷贝缺失的头文件到sysroot即可。