-
-
[原创]编译NDK特定的LLVM版本的流程记录
-
2023-6-23 15:12
5385
-
欢迎关注个人的微信公众号《Android安全工程》(可点击进行扫码关注)。个人微信公众号主要围绕 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 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
参考资料
https://github.com/kk-laoguo/ollvm-13
http://strivemario.work/archives/488c6e54.html
【清羽】Windows10下编译OLLVM-14.x
https://android.googlesource.com/toolchain/llvm_android/
https://bbs.kanxue.com/thread-271271.htm
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。
最后于 2023-6-23 15:21
被blx2024编辑
,原因: 调整描述