文章目录
1.前言
库打桩技术,可以截获对共享库函数的调用。应用上可以如可以控制函数调用的输入输出值,以自己的逻辑替换函数调用等;
基本思想:创建一个与目标函数相同原型的包装函数,通过编译时函数实现的搜索机制、或链接时函数符号解析搜索的机制、或运行时动态链接库的加载机制,将自定义的包装函数替换目标函数。
2. 测试环境
系统环境:Ubuntu14.04
Gcc版本:gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.4)
3.编译时打桩
3.1.相关文件
3.1.1.main.c
#include <stdio.h>
#include <malloc.h>
int main()
{
size_t len = 10;
char * msg = calloc(1,len);
snprintf( msg,len,"%s","aloha");
printf("msg:%s\n",msg);
free(msg);
msg = 0;
return 0;
}
3.1.2.newcalloc.h
#define calloc(nmemb,size) newcalloc(nmemb,size)
#define free(ptr) newfree(ptr)
void *newcalloc(size_t nmemb, size_t size);
void newfree(void *ptr);
3.1.3.newcalloc.c
#include <stdio.h>
#include <malloc.h>
void *newcalloc(size_t nmemb, size_t size)
{
static int _newcalloc_calltime = 0;
++_newcalloc_calltime;
printf("calloc ptr(%d,%d) ,call times=%d\n",nmemb,size,_newcalloc_calltime);
void * ptr =