一个用kld替换内核函数指针的例子
2009-05-13 03:29:51来源:未知 阅读 ()
参照相关文档,写了(或者说是验证了)一个用kld修改函数指针,从而替换内核函数的例子,以icmp输入函数icmp_input()为例。这个简单的例子将内核中对icmp_input()的函数指针调用替换为对自己的new_icmp_input()的调用。我们可以在new_icmp_input()函数中对收到的报文进行自定义的解析处理。但是在本例中,我们不做任何处理,仅打印出一行调试信息,随后继续调用我们保存下来的系统原来的icmp_input()函数,从而完成正常的icmp输入处理。工作目录下有两个文件,一个是Makefile,一个是我们的源文件icmphook.c。
Makefile文件的内容如下:
CODE:
[Copy to clipboard]
1 KMOD= icmphook
2 SRCS= icmphook.c
3
4 .include icmphook.c文件的内容如下:
CODE:
[Copy to clipboard]
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9
10 extern struct protosw inetsw[];
11 extern u_char ip_protox[];
12 void new_icmp_input(struct mbuf *, int);
13 void *old_icmp_input;
14
15 void new_icmp_input(struct mbuf * m, int off)
16 {
17 printf("new_icmp_input recv packet!\n");
18 ((void (*)(struct mbuf *, int))old_icmp_input)(m, off);
19 }
20
21 static int
22 load(struct module *module, int cmd, void *arg)
23 {
24 int error = 0;
25
26 switch(cmd) {
27 case MOD_LOAD:
28 uprintf("Replacing ICMP Input\n");
29 old_icmp_input = inetsw[ip_protox[IPPROTO_ICMP]].pr_input;
30 inetsw[ip_protox[IPPROTO_ICMP]].pr_input = new_icmp_input;
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- (已解决)VM里面的OpenBSD怎么删除一个新添加的硬盘? 2009-05-13
- 见笑了,问一个很简单的问题 2009-05-13
- adsl+openvpn的一些问题 2009-05-13
- [FreeBSD] 添加一个分区 2009-05-13
- freebsd下安装软件使用说明 2009-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
