链接时打桩
链接时打桩利用链接器的 --wrap 选项,在链接阶段重定向函数调用,无需修改源代码。
原理:链接器在处理包含 --wrap=malloc 选项的链接命令时,会自动将所有对 malloc 的引用重定向到 __wrap_malloc,并将所有对 __real_malloc 的引用重定向到真正的 malloc。
工作流程:
- 编写自定义函数
__wrap_malloc,在其中添加需要的额外逻辑。 - 在自定义函数内部,调用
__real_malloc来获取真正的malloc功能。 - 链接时加上
-Wl,--wrap,malloc选项。
代码示例:
void *__wrap_malloc(size_t size) {
printf("malloc(%zu) called\n", size);
return __real_malloc(size);
}映射关系:
malloc()在你的代码中 → 链接器将其变为__wrap_malloc()→ 调用你的自定义函数__real_malloc()在你的包装函数中 → 链接器将其变为malloc()→ 调用系统库的真实函数
这种方式不需要修改源代码或使用宏,但需要有链接阶段的控制权。
链接到
- 上一个知识点:7.16 编译时打桩
- 下一个知识点:7.18 加载运行时打桩