カーネルモジュールを使って、他のUIDのメモリを確認する。
カーネルモジュールとは、linuxの機能の1つ。再起動せずに機能を追加・変更できる。
カーネルモジュールを開発するのに必要なもの。
(1)カーネルヘッダ
(2)gcc
(3)make
カーネルヘッダの存在を確認。
$ ls /usr/src/linux-headers-$(uname -r)
なければ
$ sudo apt install linux-headers-$(uname -r)
gccとmakeの存在を確認。
$ gcc --vervion
$ make --version
なければ
$ sudo apt install build-essential
モジュールの素をc言語で書く。拡張子は「.c」。
$ nano hello_module.c
なかみ
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");
MODULE_DESCRIPTION("A Simple Hello World Module");
static int __init hello_init(void) {
printk(KERN_INFO "Hello, World! Module loaded.\n");
return 0; // 0を返すことで正常にロードされたことを示す
}
static void __exit hello_exit(void) {
printk(KERN_INFO "Goodbye, World! Module unloaded.\n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefileをつくる。拡張子なし、このファイル名じゅないとダメ。
$ nano Makefile
なかみ
obj-m += hello_module.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
注意:makeの前は、スペースじゃなくタブにすること。
.cファイルから、.koファイルをビルドする。
$ make
参考:「.o」他、様々な中間ファイルができるが、「.ko」以外、すべて不要。
モジュールをインサートする。
$ sudo insmod hello_module.ko
結果を確認する。
$ dmesg | tail
モジュールをリムーブする。
$ sudo rmmod hello_module.ko
結果を確認する。
$ dmesg | tail
makeでゴジャゴジャできたファイルたちを削除する。
$ make clean