您可以使用提供的包装功能
ld。来自
man ld:
--wrap symbol对符号使用包装函数。对的任何未定义引用symbol都将解析为__wrap_symbol。对的任何未定义引用
__real_symbol都将解析为symbol。
因此,您只需要
__wrap_在包装函数中使用前缀,并
__real_在要调用实函数时使用前缀即可。一个简单的例子是:
malloc_wrapper.c:
#include <stdio.h>void *__real_malloc (size_t);void * __wrap_malloc (size_t size){ void *lptr = __real_malloc(size); printf("Malloc: %lu bytes @%pn", size, lptr); return lptr;}测试应用
testapp.c:
#include <stdio.h>#include <stdlib.h>int main(){ free(malloc(1024)); // malloc will resolve to __wrap_malloc return 0;}然后编译应用程序:
gcc -c malloc_wrapper.cgcc -c testapp.cgcc -Wl,-wrap,malloc testapp.o malloc_wrapper.o -o testapp
结果应用程序的输出将是:
$ ./testappMalloc: 1024 bytes @0x20d8010



