Linux下系统调用的hook机制
程序员文章站
2024-01-21 21:31:52
...
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
未完待续…
上一篇: Linux时间戳与日期之间的转换
下一篇: 为新开终端同步本地时间