设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 操作系统 >> OpenBSD >> OpenBSD可加载内核模块编程完全指南
精品推荐
OpenBSD点击TOP10
·Free BSD,Linux之比较
·freebsd VPN 搭建
·freebsd系统时间同步及ntp服务的提供
·freebsd ipf+ipnat+ipfw建立带流量控制的透明网关
·FreeBSD的配置
·ipf+ipnat+ipfw建立带流量控制的透明网关
·POSTFIX下的反垃圾反病毒邮件系统
·FreeBSD 5.2.1R Web Server架设实例过程
·OpenBSD可加载内核模块编程完全指南
·FreeBSD+IPFILTER实现整网(N个Vlan)透明代理上网
操作系统点击TOP10
·Windows Vista完全硬盘安装法
·Windows Vista 激活不求人
·Windows Vista局域网网络连接设置
·Windows Vista系统动态桌面截图欣赏
·Windows XP中磁盘的分区应用
·Windows NT/2000/XP 出现蓝屏并显示“STOP 0x0000007f”错误
·让Windows XP变身Vista
·一招搞定Vista系统软件不兼容问题
·教你如何正确配置和优化Windows Vista
·只转两圈 加快Windows XP启动速度
精选专题

OpenBSD可加载内核模块编程完全指南

作者: 来源:网络文章 时间:2005-12-13 0:45:31

OpenBSD可加载内核模块编程完全指南(15) [e4gle@openbsd29]# gcc -D_KERNEL -I/sys -c null_vfsops.c
[e4gle@openbsd29]# gcc -D_KERNEL -I/sys -c null_vnops.c
[e4gle@openbsd29]# gcc -D_KERNEL -I/sys -c nullmod.c
[e4gle@openbsd29]# ld -r -o nullfs.o null_vfsops.o null_vnops.o null_subr.o nullmod.o
[e4gle@openbsd29]# modload -o nullfsmod -enullfsmod nullfs.o
[e4gle@openbsd29]# modstat
Type     Id Off Loadaddr Size Info     Rev Module Name
VFS       0  -1 e0b84000 0003 e0b860d0   2 nullfs
[e4gle@openbsd29]#

ok,虚拟文件系统模块就说到这.

★其他类型的模块

这些模块被用来执行一些预定的模块类型所没有定义的操作.在我这个例子中我们将为网络协议栈里加入控制代码,然后打印出我们接收到的

tcp包的一些信息.

当我们在书写其他类型的模块时,我们必须要完整的检查一遍,确定没有预定的操作.例如,同样的操作模块不能被加载两次.这等于我们在往内

核中去写入模块.当然,
我们都会在模块加载和卸载的控制函数里去控制.

一个其他类型的模块结构象下面这样定义:

struct lkm_misc {
        MODTYPE lkm_type;
        int     lkm_ver;
        char    *lkm_name;
        u_long  lkm_offset;
};

同样,我们首先有一个模块的类型(在这个例子中试LM_MISC),然后是lkm的版本,再接着是模块名和offset的值.在我的这个例子中offset值

没有用到,但在/usr/share/lkm/misc
提供的例子中(增加一个系统调用)offset被用来在系统调用表里面标记一个新的系统调用的位置.
用MOD_MISC宏来初始化该结构:

MOD_MISC("tcpinfo")

这里只有一个参数,指定了模块名.
当我们的模块被加载后,该模块把tcp_input函数的指针改为我们制定的new_input函数.新的函数会打印出mbuf里的包头的一些信息,然后

再调用原来的tcp_input函数.在做这些
之前,我们一定要确定同类的模块没有被加载.

对于这个模块一些值得注意的地方:首先运行这个模块时不适合传输大量的tcp包,printf()会变的很慢.大家试一下就知道.这个例子只是做测

试之用,其实大家可以想想我们既然
可以改变tcp协议栈里的函数指针,我们用模块来做一个tcp的内核后门也应该很容易,就留给大家思考吧,呵呵.第二,此代码原来是运行在

freebsd之上的,稍微修改了一下而已,
bsd系列的内核真是很相像.

以下是该模块的完整代码(tcpmod.c):

#include <sys/param.h>
#include <sys/systm.h>
#include <sys/mbuf.h>
#include <sys/exec.h>
#include <sys/conf.h>

1.OpenBSD可加载内核模块编程完全指南(1)
2.OpenBSD可加载内核模块编程完全指南(2)
3.OpenBSD可加载内核模块编程完全指南(3)
4.OpenBSD可加载内核模块编程完全指南(4)
5.OpenBSD可加载内核模块编程完全指南(5)
6.OpenBSD可加载内核模块编程完全指南(6)
7.OpenBSD可加载内核模块编程完全指南(7)
8.OpenBSD可加载内核模块编程完全指南(8)
9.OpenBSD可加载内核模块编程完全指南(9)
10.OpenBSD可加载内核模块编程完全指南(10)
11.OpenBSD可加载内核模块编程完全指南(11)
12.OpenBSD可加载内核模块编程完全指南(12)
13.OpenBSD可加载内核模块编程完全指南(13)
14.OpenBSD可加载内核模块编程完全指南(14)
15.OpenBSD可加载内核模块编程完全指南(15)
16.OpenBSD可加载内核模块编程完全指南(16)
17.OpenBSD可加载内核模块编程完全指南(17)
18.OpenBSD可加载内核模块编程完全指南(18)
19.OpenBSD可加载内核模块编程完全指南(19)
共19页 9 7 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [198 :>

OpenBSD可加载内核模块编程完全指南 相关文章:
OpenBSD可加载内核模块编程完全指南 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com