库打桩机制
库打桩(Library Interpositioning)是一种拦截库函数调用的技术,可以在不修改库源代码的前提下插入自定义逻辑。
应用场景:程序调试(统计malloc调用次数)、性能分析(测量函数耗时)、安全审计(输入验证)、行为追踪等。
三种实现方式:
-
编译时打桩:利用C预处理宏在编译阶段替换函数名。对所有调用进行全局替换,简单直接但需要访问源代码。
-
链接时打桩:利用链接器的
--wrap选项,在链接阶段将标准函数名重定向到自定义包装函数。不需要修改源代码,但需要参与链接过程。 -
加载/运行时打桩:利用
LD_PRELOAD环境变量优先加载自定义共享库,或使用dlsym(RTLD_NEXT, ...)在运行时动态查找目标函数。最灵活,无需重新编译,甚至可以在已编译好的程序上使用。
每种方式各有优劣,选择取决于对源代码的可获取程度和所需拦截的粒度。
链接到
- 上一个知识点:7.14 共享库(动态链接)
- 下一个知识点:7.16 编译时打桩