subhook源码下载地址 https://github.com/Zeex/subhook
//对系统函数open进行拦截
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "subhook.h"
subhook_t foo_hook;
typedef int (*fun)(const char *,int );
//钩子函数
int my_open(const char *pathname, int flags){
fun run=NULL;
printf("hello world\n");
return run(pathname,flags);//对系统open进行调用
}
{
int fd = 0;
//创建钩子用my_open替换系统函数open
foo_hook = subhook_new((void*)open,(void*)my_open,SUBHOOK_OPTION_64BIT_OFFSET);subhook_install(foo_hook);//安装钩子
//此处将走到钩子my_open处
fd = open("/yuan/tt",O_WRONLY|O_CREAT);if(fd < 0)
printf("failed \n");
subhook_remove(foo_hook);//移除钩子
subhook_free(foo_hook);//释放资源
return 0;
}