LLVM 简介、编译流程、CLion 调试
LLVM 项目概述
LLVM
是于2002
年创建的一个模块化和可重用的编译器和工具链技术的集合。它能够编译UNIX
的内核,并用于漏洞挖掘
。LLVM
包括了多个核心组件,其中关键的包括:
核心库(LLVM Core) - 优化器
- 负责将源码优化到
LLVM
的中间语言(Intermediate Representation, IR
)。
Clang
LLVM
的前端编译器,将C/C++
代码编译成汇编语言和可执行文件。- 兼容C语言,支持
C++11
和C++14
标准。`
LLVM
还拥有众多子项目,包括链接器、各种语言的前端等。
实际操作步骤
下载LLVM
- 官方网站:releases.llvm.org
配置编译环境
Debug编译指令:
mkdir build_debug
cd build_debug
cmake -G Ninja ../llvm
````
**Release编译指令**:
```shell
mkdir build_release cd build_release cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF -DLLVM_ENABLE_PROJECTS="clang" ../llvm ninja -j8
- 详细编译过程文档见:LLVM官方文档
Clion项目配置
- 使用
Clion
打开llvm
目录下的CMakeLists.txt
文件。 Setting -> CMake
,添加release构建目录并配置CMake。
CMake配置示例:
shellxw
cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang"
测试和调试
- 定位到
clang -> tools -> driver -> main
,进行测试运行和调试。
处理头文件问题
如果发现 stdio.h
头文件找不到的问题,在CMake
中添加以下配置:
cmake
set(MACOSX_SDK_PATH /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk)
include_directories(${MACOSX_SDK_PATH}/usr/include)
- 设置后重新编译项目。
QA
1.fatal error: ‘stdio.h’ file not found
2.Clion
运行llvm
中的clang
子项目提示 fatal error: ‘stdio.h’ file not found #include <stdio.h> ^~~~~~~~~ 1 error generated.
3.xcrun --show-sdk-path
获取了sdk
路径之后,如何使用 include_directories
加载路径 解决stdio
找不到的问题
研究方向
- 彻底搞懂
OLLVM
:因为OLLVM(Obfuscator-LLVM)
涉及底层编译技术和高级代码混淆技术,这对于增强逆向安全性非常重要。通过理解和移植OLLVM,您能更好地分析和逆向混淆后的代码,这对提升逆向分析技能至关重要。 - 高级调试之
VMP
:VMP(Virtual Machine Protection)
是一种先进的代码保护技术。学习VMP
的分析方法以及如何使用相关工具(如Hyperpwn
)对受VMP保护
的应用进行调试,将有助于您在逆向工程领域进一步提升。 Unicorn_unidbg
:学习Unicorn
模拟器和Unidbg
的使用能增加您在分析运行时代码逻辑方面的能力,特别是对JNI
和SO
文件的调用和模拟。这将是移动逆向分析领域的重要技能。Frida
高级逆向:由于您对Frida
的了解还处在初级阶段,深入学习Frida
的高级用法将有助于您进行更复杂的动态分析。学会如何使用Frida
分析OLLVM混淆
和追踪非标准算法的执行过程将提高您处理动态环境下的复杂情况的能力。Frida_FART
全自动脱壳机:对加壳技术的深入理解和脱壳技术的掌握对于逆向工程师来说是基础且关键的。FART(Fast-Android-Runtime)
脱壳技术整合了Frida
的动态分析能力,掌握它对于自动化脱壳机的开发与应用逆向具有重要意义。
除了上述领域外,需要一定时间逐步熟悉的还有:
- FRIDA 高级逆向
- FART 全自动脱壳机: 这些内容与上文提到的09和10知识点相关,并提供了进一步分析和开发工具的信息。
- ARM&&C++ 算法还原原理: 如果您对低级别的ARM汇编和C++逆向不够精通,这将是理解程序执行和开发反汇编器工具的基础。
- C11 && ART 虚拟机开发: 对高级C特性和ART虚拟机的理解将加深您对Android系统和它的运行时行为的理解,有助于您开发更高效的逆向工具。