1

私は最近これをよく研究しており、さまざまな記事やスタックオーバーフローの投稿を調べましたが、明確な答えが見つからないようです. カーネルモジュールを作成するとき、私はほとんどのコードが次のようになっているのを見てきました:

#include <linux/init.h>
static int test_init(void) {return 0;}
static void test_exit(void) {;}
module_init(test_init);
module_exit(test_exit);
  • 私が見つけた考えられる理由の 1 つは、これを行うと、実行中のモジュールに悪意のあるコードを挿入することが難しくなるということです。

  • もう 1 つは、名前空間の乱雑さを軽減することですが、それは、リンクしてコンパイルしているカーネル モジュールのコンテキストでのみ問題になるのではないでしょうか? 実際に ld のようにコードをカーネルにリンクするとinsmod、名前の衝突がシステムを台無しにすることがわかります。これが理由ですか?

他の理由は考えられません。慣習をやみくもに使い始める前に、これを明確にしたいと思います。

前もって感謝します

4

2 に答える 2