欢迎关注个人的微信公众号《》(可点击进行扫码关注)。个人微信公众号主要围绕 Android 应用的安全防护和逆向分析, 分享各种安全攻防手段、Hook 技术、ARM 汇编等 Android 相关的知识。
LLVM源码下载
源码编译环境: ubuntu 22.04.1 LTS
产物使用环境: window10
NDK版本: 23.1.7779620
选择的NDK
版本:
1
|
..\Android\Sdk\ndk\
23.1
.
7779620
|
对应的 llvm 版本:
1
|
..\Android\Sdk\ndk\
23.1
.
7779620
\toolchains\llvm\prebuilt\windows
-
x86_64\AndroidVersion.txt
|
1
2
|
12.0
.
8
based on r416183c1
|
源码下载
采用清华源
1
2
3
4
5
6
7
8
|
mkdir ~
/
bin
PATH
=
~
/
bin
:$PATH
curl https:
/
/
mirrors.tuna.tsinghua.edu.cn
/
git
/
git
-
repo > ~
/
bin
/
repo
chmod a
+
x ~
/
bin
/
repo
export REPO_URL
=
'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
mkdir llvm
-
toolchain && cd llvm
-
toolchain
repo init
-
u https:
/
/
mirrors.tuna.tsinghua.edu.cn
/
git
/
AOSP
/
platform
/
manifest
-
b llvm
-
toolchain
|
把 NDK 下的 %ANDROID_SDK_PATH%\ndk\23.1.7779620\toolchains\llvm\prebuilt\windows-x86_64
的 manifest_7714059.xml
文件替换掉 .repo
下的 manifest/default.xml
文件替换(或者直接把内容替换):
这里的 manifest_7714059.xml 文件内的 google 相关的链接需替换成 https://mirrors.tuna.tsinghua.edu.cn/
需要注意,.repo
是隐藏文件夹。可能直接在 Window 下复制文件到 Linux 系统出现乱码问题,推荐使用 FileZilla
复制文件。
1
2
|
repo init
-
m default.xml
repo sync
-
c
|
编译
1
|
python toolchain
/
llvm_android
/
build.py
-
-
no
-
build linux
|
--no-build linux
表示不需要编译 Linux 环境下的 toolchain 。
移植LLVM模块
通过比较 toolchains\llvm\prebuilt\windows-x86_64/bin
文件夹下的 clang.exe
和 clang++.exe
发现,两者的 md5 值是相同的,读者感兴趣可以尝试比较下。故可以通过上述的步骤来解决 ollvm 编译出的 clang++.exe
报错问题。
直接把编译好后out/install/windows-x86/clang-dev/bin
中的 clang.exe
替换对应的NDK中的toolchains\llvm\prebuilt\windows-x86_64/bin
的 clang.exe
和 clang++.exe
(需把编译出的 clang.exe
拷贝重命命名替换原NDK中的 clang++.exe
)
报错:ImportError: libffi.so.6: cannot open shared object file: No such file or directory
解决:
find /usr/lib -name libffi.so*
sudo ln -s /usr/lib/x86_64-linux-gnu/libffi.so.8 /usr/lib/x86_64-linux-gnu/libffi.so.6
参考资料
更多【编译NDK特定的LLVM版本的流程记录】相关视频教程:www.yxfzedu.com