|
发表于 2008-11-6 11:07:36
|
显示全部楼层
内核里可以拦截系统调用,
用户层可以直接覆盖(貌似), 我试了一下,一些不明白的地方帮我解释解释:
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <dlfcn.h>
- ssize_t (*old_write)();
- // old_write = 0xb7ed71a0; 这样硬覆盖不成功, 能够实现吗?
- ssize_t write(int fd, const void *buf, const size_t count);
- ssize_t write(int fd, const void *buf, const size_t count) {
- printf("this is my write!!!\n");
- old_write(fd, buf, count);
- }
- int main(void) {
- void *handle;
- handle = dlopen("libc.so.6", RTLD_LAZY);
- // libc.so为什么不行?/usr/lib/libc.so /lib/libc.so.6不一样
- if (!handle) {
- fprintf(stderr, "%s\n", dlerror());
- exit(2);
- }
- dlerror();
- old_write = dlsym(handle, "write");
- write(1, "asd\n", 4 );
- dlclose(handle);
- return(0);
- }
复制代码 |
|