|
发表于 2003-5-9 20:45:13
|
显示全部楼层
回复:
int (*open)(char *, int, int);
int kread_init(){
open = sys_call_table[SYS_open];
// printk("<1>%s%x\n", "open=", (unsigned long)open);
mm_segment_t old_fs_value=get_fs();
set_fs(get_ds());
int res = open("/aaa", O_CREAT|O_RDWR|O_EXCL, 0640);
// printk("<1>%s%d\n", "res of open = ", res);
set_fs(old_fs_value);
return 0;
}
void kread_cleanup(){
//
}
-------------------------------------------------------------------
overflow 你的gdb 吧, 不谈。
-----------------------------------------------------------------
我想该写写看
-----------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
/* SAME TO U
extern void* sys_call_table[];
int (*orig_system)(const char *path);
int find_system(const char *path)
{
return 0;
}
int init_module(void)
{
orig_system=sys_call_table[SYS_system];
sys_call_table[SYS_system]=find_system;
return 0;
}
void cleanup_module(void)
{
sys_call_table[SYS_system]=orig_system;
}
---------------
大多方法都类似,也许是学习老外吧。呵呵
参照LKM_HACKER方法。 |
|