gpt4 book ai didi

c - 为什么在 LKM 中使用静态函数是惯例

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:16:43 25 4
gpt4 key购买 nike

我最近一直在研究这个问题,并查看了各种文章和 stackoverflow 帖子,但我似乎无法找到直接的答案。在创建内核模块时,我看到大多数代码如下所示:

#include <linux/init.h>
static int test_init(void) {return 0;}
static void test_exit(void) {;}
module_init(test_init);
module_exit(test_exit);
  • 我发现的一个可能原因是这样做会增加将恶意代码注入(inject)正在运行的模块的难度。

  • 另一个是命名空间的困惑程度降低了,但这不会只是您正在链接和编译的内核模块上下文中的问题,而不是其他问题吗?如果 insmod 实际上像 ld 一样将代码链接到内核中,那么我可以看到名称冲突将如何弄乱系统。是这个原因吗?

我想不出任何其他原因,我希望在我盲目地开始使用约定之前澄清这一点。

提前致谢

最佳答案

如果在 .c 文件之外不需要某个函数,则应在该 .c 文件中将其声明为静态的。

这只是很好的封装。

它避免了名称冲突并让读者了解您的意图。

关于c - 为什么在 LKM 中使用静态函数是惯例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19149109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com