0

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

通过 strace,我可以看到老师的程序是如何读取的:

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

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

有任何想法吗?谢谢!

4

1 回答 1

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,请在原始调用后阅读。

于 2013-10-20T18:38:30.200 回答