我有一个挂起read syscall的内核模块。我需要做的一件事就是捕获正在执行我老师提交的外部程序的读取系统调用的内容。
通过strace,我能够看到我的老师的程序是如何进行阅读的:
read(6, "\v\0\0\0\tExercise1", 14)
读取挂钩工作,问题是,我不知道如何从新读取函数内部读取内容,因为如果我正确* buf为空并且在原始系统调用读取被调用之前未填充。所以,理论上我应该直接从文件描述符中读取,但不使用read syscall我不知道该怎么做。
有什么想法吗?谢谢!
答案 0 :(得分: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
的内容,请在原始通话后阅读。