该方法可以只替换一个库函数,而不用替换一整个.so库文件
示例:strcmp.c
#include <stdio.h>
#include <stdlib.h>
int strcmp(const char *s1, const char *s2)
{
int a=3;
printf("strcmp %d %s\n",a,s1);
return a+1;
}
main.c
#include <stdio.h>
int main(void)
{
int ret;
char *a = "aaaaa";
char *b = "bbbaa";
ret = strcmp(a, b);
printf("aaaaa %d\n",ret);
return 0;
}
编译运行:
gcc -shared -fPIC strcmp.c -o libstrcmp.so -ldl
gcc a.c
LD_PRELOAD="./libstrcmp.so" ./a.out