LKM函数状态的隐式声明

时间:2018-06-26 11:23:16

标签: c module linux-kernel kernel kernel-module

我目前正在编写Linux内核模块(第一次)。

我正在尝试使用stat函数。我知道常规导入无法在内核代码中正常工作,因此我导入了等效导入(这就是我的想法...):

#include <linux/stat.h>
#include <linux/errno.h>
#include <linux/unistd.h>

我没有直接收到有关导入的任何错误,但是我收到以下消息:

  • 错误:函数“ stat”的隐式声明[-Werror = implicit-function-declaration]
  • 错误:未声明“ errno”(此功能首次使用)

分别针对这两行:

int ret = stat(pathname, statbuf);

errno = ENOENT;

欢迎任何帮助。

谢谢。

PS:我正在研究Kali 4.9.0-kali4-amd64,但是我正在尝试编写一些通用的东西,可以在多个Linux版本上使用。

1 个答案:

答案 0 :(得分:-1)

首先,最有可能是不想进行统计,无论实现的是什么。在最坏的情况下,您应该具有“结构文件”对象,或者直接指向一个指向您感兴趣的文件的指针。然后,在极少数情况下,您需要获取stat提供的信息,可以使用适当的例程这需要文件或牙科。然后,您可以继续对已经具有指针的文件进行操作。仅执行统计信息然后决定要做什么通常是一个安全性或可靠性问题:在您决定打开目标路径,它可能是一个完全不同的文件-有人可能在统计调用时删除了该文件,并植入了一个新文件。这是标准Bug类的一部分:检查时间使用时间。

第二,内核中没有'errno'变量,而您尝试使用它的事实强烈表明您是一个非常初级的程序员。因此,我怀疑您暂时不应该使用内核。

您可能还想阅读这篇论文:http://www.watson.org/~robert/2007woot/2007usenixwoot-exploitingconcurrency.pdf

那么,您到底想实现什么?