1、gcc -Wl,--wrap,function
-Wl表示将参数传递给ld链接器,--wrap,function或者--wrap=function,此选项可以替换标准库函数,实现不改变原有库的情况下,使用新实现替换原有库函数。
Example:
#include<stdio.h>
#include<stdlib.h>
void* __real_malloc(size_t size); // 只声明不定义__real_malloc
void* __wrap_malloc(size_t size) // 定义__wrap_malloc
{
printf("__wrap_malloc called, size:%d\n", size); // log输出
return __real_malloc(size); // 通过__real_malloc调用真正的malloc
}
int main(void)
{
void* mem=malloc(10);
}
输出:
d:\VScode\.vscode>gcc wrap_test.c -o wrap_test -Wl,--wrap,malloc
d:\VScode\.vscode>wrap_test.exe
__wrap_malloc called, size:16
__wrap_malloc called, size:14
__wrap_malloc called, size:10