2013-10-20 69 views
0

我有一个挂钩读取系统调用的内核模块。我必须做的一件事就是捕捉正在执行由我的老师提交的外部程序的系统调用的内容。挂钩读取系统调用

随着strace的,我能看到我的老师的计划是做阅读:

read(6, "\v\0\0\0\tExercise1", 14) 

而且读挂钩工作,问题是,我不知道怎么读来自新读取函数内部的内容,因为如果我正确* buf是空的并且在调用原始系统调用读取之前未被填充。所以,理论上我应该直接从文件描述符中读取,但不使用读取系统调用,我不知道该怎么做。

任何想法?谢谢!

+0

你能告诉我们你的挂钩模块的代码吗? – Michael

回答

1

基本上,你的钩子函数应该是这样的:

size_t my_hooked_read(int fildes, void *buf, size_t nbytes) 
{ 
    size_t ret; 

    //Do something before original call 

    ret = original_read(fildes, buf, nbytes); //call the original read ! 

    //Do something after original call 
    //buf is correctly filled here ! 

    return ret; 
} 

如果你想读的buf内容,原来的呼叫后阅读。

+0

谢谢迈克尔,但挂钩功能不是问题,或多或少正是你的功能。我的问题位于://在原始调用之前做一些事情。 我想要做的是读取buf ...但理论上是空的,因为读取系统调用没有完成,所以我应该读取文件描述符的内容。问题是我不知道该怎么做。 – user1042850

+0

是否有任何理由说明为什么在原始调用后没有读取缓冲区**?内核模块可以使用 – Michael

+0

吗?从理论上讲,我应该阅读,因为我们正在研究... – user1042850