玩转freebsd内核模块(1)

http://tech.ddvip.com   2007年01月13日    社区交流

本文详细介绍玩转freebsd内核模块(1)

  1.介绍

  首先介绍内核模块的概念,还有系统调用的概念,说明的一点就是freebsd安全级别问题,通常在2级就不可以加载模块了

  可以用sysctl调整设置或者在/etc/rc.conf中增加如下条目在启动时调整:

  kern_securelevel_enable="YES"

  kern_securelevel="2"

  本文only用来教育目的,:)所有涉及的代码都可以在CuriousYellow(CY)中找到.

  1.2.内核模块

  请参考scz@nsfocus前辈翻译的内核链接机制(KLD)编程指南>,如果你对linux的lkm了解,这个很好理解。在/usr/share/examples/kld/有简单的例子。

  1.2一些有用的的函数

  这里给出一些有用的函数,通常在系统调用中用到copyin/copyout/copyinstr/copyoutstr这几个函数可以用来从用户空间得到

  连续的大块数据,manpagecopy(9)可以得到更多了解,在KLDtutorial也可以找到

  下面是个小例子来展示copyin的用法,我们构造了一个带有一个字符串指针做参数的系统调用,通过copyin把字符串从用户空间移动到内核空间来

structexample_call_args{
  char*buffer;
};
int
example_call(structproc*p,structexample_call_args*uap)
{
  interror;
  charkernel_buffer_copy[BUFSIZE];
  /*copyintheuserdata*/
  error=copyin(uap->buffer,&kernel_buffer_copy,BUFSIZE);
  [...]
}
fetch/store

  这两个函数用来得到比较小块的数据,小到字节或者字长的数据

  spl..

  这个函数用来调整中断优先级,可以用来阻止某些中断处理程序的执行,下面的例子中当中断处理函数指针icmp_input修改时,因为

责编:豆豆技术应用

正在加载评论...