kernel pwn入门(0) 驱动开发相关

最近准备入门一下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
};

驱动进行读写操作的时候对应的就是调用这张表中的函数。

暂时就这么多吧,以后慢慢补充…..

发表评论

电子邮件地址不会被公开。 必填项已用*标注