Linux内核模块调用

做reverse内核模块测试时,用C语言写个小程序进行内核模块调用,一点记录。

Linux内核模块调用

1 reverse模块

reverse模块解析 译文:

编写属于你的第一个Linux内核模块

源代码托管地址:

vsinitsyn/reverse - GitHub


2 C程序实现内核模块调用

2.1 C代码

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <string.h>

#include <sys/stat.h>
#include <fcntl.h>

void main(int argc, char* argv[])
{
int fd = open(\"/dev/reverse\", O_RDWR);
write(fd, argv[1], strlen(argv[1]));
read(fd, argv[1], strlen(argv[1]));
printf(\"Read: %s\\n\", argv[1]);
}
  • <sys/stat.h>fcntl.h是open函数及参数O_RDWR依赖的头文件
  • 内核模块的调用类似于对文件进行读写,write函数写入内核模块数据缓冲区,read函数再从缓冲区读取数据。而读取出的数据,是经过内核模块处理之后的。

2.2 Shell下测试

1
2
3
$ gcc testReverse.c -o testRe
$ sudo ./testRe \'A quick brown fox jumped over the lazy dog\'
Read: dog lazy the over jumped fox brown quick A
  • 注意:调用内核模块的C程序需要sudo使用root权限执行。
    • 经测试,无root权限则调用无效,字符串以原样返回。

2.3 内核模块相关命令

  • insmod <mod_name>
    • install module
  • rmmod <mod_name>
    • remove module
  • lsmod
    • list module
    • lsmod | grep reverse
  • dmesg
    • print or control the kernel ring buffer