soLoader — 自定义 Linker 加载 Android SO 文件

2026/06/08 sec C++ · Android · SO加载 · linker · ELF · 逆向工程 · 开源项目 605 字 · 约 2 分钟 阅读
soLoader 是一个实现自定义动态链接器的开源项目,能够绕过系统默认 linker 加载 Android 平台的共享库文件。

soLoader — 自定义 Linker 加载 Android SO 文件

工具简介

soLoaderGitHub)是由 SoyBeanMilkx 开发的开源项目,使用 C++ 编写,当前拥有 237 颗星。它实现了一个自定义的动态链接器(linker),能够独立加载 Android 平台的共享库(.so 文件),绕过系统默认的 linker。

核心特性

  • 自定义 ELF 加载:完全自主实现的 ELF 文件加载器
  • SO 文件支持:支持 Android 平台 SO 文件加载
  • 重定位处理:实现完整的重定位功能(R_ARM_JUMP_SLOT、R_ARM_GLOB_DAT 等)
  • 符号查找:支持符号查找和解析
  • 依赖递归加载:自动递归加载依赖的 SO 文件

使用示例

ElfLoader loader;
if (loader.LoadLibrary(argv[1])) {
    void* test_func = loader.GetSymbol("yuuki_test");
    if (test_func) {
        printf("Testing: 1 + 1 = %d\n", 
               ((int(*)(int,int))test_func)(1, 1));
    }
}

技术原理

  1. ELF 文件解析:解析 ELF 头、程序头、节区头等结构
  2. 内存映射:将 SO 文件按需映射到内存
  3. 重定位处理:处理各种重定位类型
  4. 符号解析:实现符号查找和解析逻辑
  5. 依赖加载:递归加载依赖的 SO 文件

应用场景

  • 插件化架构实现
  • 热修复技术研究
  • SO 文件保护与加固
  • 动态加载技术研究
  • Android 安全研究

文档信息

加载评论…