【发布时间】:2009-06-15 21:22:02
【问题描述】:
我目前正在做一个项目,我需要跟踪几个系统调用和低级函数的使用情况,例如mmap、brk、sbrk。到目前为止,我一直在使用函数插入来执行此操作:我编写了一个与要替换的函数同名的包装函数(例如 mmap),然后通过设置 LD_PRELOAD 将其加载到程序中环境变量。我通过使用dlsym 加载的指针调用真正的函数。
不幸的是,我要包装的函数之一 sbrk 在内部由 dlsym 使用,因此当我尝试加载符号时程序崩溃。 sbrk在Linux中不是系统调用,所以不能简单地用syscall间接调用。
所以我的问题是,如何在不使用dlsym 的情况下从同名包装函数调用库函数?是否有任何编译器技巧(使用 gcc)可以让我引用原始函数?
【问题讨论】:
标签: c linux function-interposition dlsym