最近准备入门一下kernel pwn了,感觉还是要看一下驱动开发相关的一些东西。
还是看一下hello world吧
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk("<1> Hello world!\n");
return 0;
}
static void hello_exit(void)
{
printk("<1> Bye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
这个东西就是一个最简单的驱动,其实一眼就能看出来在干啥了。module_init是在加载驱动的时候会干的事,module_exit是在移除驱动的时候会做的事。
之前也在这篇文章中看到了一张比较完整的驱动模块的表。
Events | User functions | Kernel functions |
---|---|---|
Load | insmod | module_init() |
Open | fopen | file_operations: open |
Close | fread | file_operations: read |
Write | fwrite | file_operations: write |
Close | fclose | file_operations: release |
Remove | rmmod | module_exit() |
其中中间的操作对应的函数储存在一个结构体里面:
struct file_operations module_fops =
{
read: module_read,
write: module_write,
open: module_open,
release: module_release
};
驱动进行读写操作的时候对应的就是调用这张表中的函数。
暂时就这么多吧,以后慢慢补充…..