Hasty Briefsbeta

双语

Detour: A detour through the Linux dynamic linker

10 months ago
  • #Dynamic Linking
  • #Linux
  • #Static Linking
  • Detour是一个静态库,允许构建不依赖glibc或musl的静态链接可执行文件,同时仍支持运行时的动态链接功能。
  • 它能在不依赖libc的情况下访问系统动态链接器(ld-linux.so),实现dlopen、dlsym等功能,并支持同一进程中混合多个C运行时环境。
  • 其工作原理是通过极简的ELF存根可执行文件引导动态链接器,捕获关键符号后将控制权交还主应用程序。
  • 目前支持x86_64架构的Linux系统静态/动态上下文,其他架构需额外汇编开发,具有可扩展性。
  • 完全静态链接存在局限性,例如无法访问依赖动态链接的系统组件(GPU驱动、窗口系统、音频子系统等)。
  • Detour的解决方案是静态链接核心应用,同时配置运行时动态链接器。
  • 该库使用的ELF存根辅助程序仅约35行C代码,专为最大限度兼容glibc系统设计。
  • 随附的演示程序展示了完全独立的静态可执行文件如何动态加载libc、libm、libSDL2和libGL库。
  • 典型应用场景包括:创建无libc却可加载插件的程序、规避依赖地狱、混合musl/glibc、不链接glibc直接访问硬件加速API等。
  • Detour通过精妙利用Linux现有的动态二进制启动机制,实现对动态链接器介入程度的精准控制。