标签:总结 Lkm 程序 init Rootkit exit 内核 include mod
LKM -> Linux Kernel Module
作为Linux内核程序,lkm拥有极高的权限,故常用于编写驱动,当然,在Rootkit领域也十分流行。
LKM基本结构
LKM程序的结构和一般用户模式下的c语言程序不同,一个普通的C语言程序如下:
1 #include <stdio.h> 2 3 void main() { 4 printf("Hello world in userland."); 5 }
但是当我们编写lkm时,需要一个init函数和一个exit函数,故需包含如下头文件
1 #include <linux/kernel.h> 2 #include <linux/init.h> 3 #include <linux/module.h>
一个最基本的lkm程序如下:
#include <linux/kernel.h> #include <linux/module.h> #include <linux/init.h> static int __init mod_init() { printk(KERN_INFO "rootkit: init\n"); return 0; } static void __exit mod_exit() { printk(KERN_INFO "rootkit: exit\n"); } module_init(mod_init); module_exit(mod_exit);
其中mod_init会在模块初始化时被加载,退出时则会执行mod_exit,作为内核程序,打印信息时无法使用printf,要用printk代替,KERN_INFO表示打印内核消息。
通过如下Makefile对文件进行编译:
obj-m += example.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
将exmaple替换为文件名
通过 sudo dmesg --clear && sudo dmesg 查看内核信息。
标签:总结,Lkm,程序,init,Rootkit,exit,内核,include,mod 来源: https://www.cnblogs.com/sh3llcat/p/16546948.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。