能力值:
( LV13,RANK:240 )
|
-
-
2 楼
原来的函数在org,参数在hacked这边,函数知道了,参数知道了,不知道怎么调用????
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
int hack_mkdir(const char *path, mode_t mode) //定义一个替换函数,它将用来替换某个系统调用
{
printk("<0> mkdir 已经被我成功拦截!!\n");
return (*orig_mkdir)(path,mode);
}
这样,貌似不可以。。。参数path,mode 怎么获得,传递的呢?
初学 lkm 编程,忘大神耐心讲解,感激不尽。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
orig_mkdir 是一个函数指针的原型。 应该是typedef 的。
然后使用一个变量来保存原始指针 。
mydir = (orig_mkdir)*********;
mydir(path, mode);//这样就可以了。
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
我打印了一下path,发现是 null。。。所以第一步因该是获得用户态下的参数path。
orig_mkdir 获得如下:
int (*orig_mkdir)((const char *pathname, mode_t mode); /*the original systemcall*/
int hacked_mkdir((const char *pathname, mode_t mode) {
//请问如何在此调用原来的mkdir函数呢??
return 0; /*everything is ok, but he new systemcall does nothing*/
}
static int __init begin(void)
{
orig_mkdir = sys_call_table[__NR_mkdir]; //保存mkdir原来的的地址,我确定现在已经获得正确的系统调用的地址
sys_call_table[__NR_mkdir] =hack_mkdir; //挟持
return 0;
}
|
|
|