您的位置:首页 > 运维架构 > Linux

Linux下系统调用的hook机制

2018-03-15 14:56 316 查看

Linux下系统调用的hook机制

[]http://blog.csdn.net/sdulibh/article/details/42078681]

http://0pointer.de/blog/projects/mutrace.html

http://0pointer.de/blog/projects/mutrace.html – 对mutex进行trace的hook

https://github.com/dbpercona/mutrace/blob/master/README

linux下系统调用hook机制的原理

LD_PRELOAD机制:允许用户手动指定使用的动态链接库,将系统库函数hook->lib.so.6

dlyopen;dlsym: 通过句柄和连接符名称获取真实库函数名或者变量名

实例

main.c

编译:gcc -o main main.c

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
if( strcmp(argv[1], "123") )
{
printf("Incorrect\n");
}
else
{
printf("Correct\n");
}
return 0;
}


hook.c

编译:gcc -fPIC -shared -o hook.so hook.c -ldl

#include<stdio.h>
#include<string.h>
#include<dlfcn.h>
typedef int (*STRCMP) (const char*, const char*);
int strcmp(const char* s1, const char* s2) {
static void *handle = NULL;
static STRCMP old_strcmp = NULL;
if(!handle) {
handle = dlopen("libc.so.6", RTLD_LAZY);
old_strcmp = (STRCMP)dlsym(handle, "strcmp");
}
if(old_strcmp) printf("addr=%p\n", old_strcmp);
printf("you are hacked. s1=<%s>,s2=<%s>\n", s1, s2);
return old_strcmp(s1, s2);
}


运行: LD_PRELOAD= ./hook.so ./main 123

未完待续…
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: