Chinaunix

标题: 钩子的初始化 [打印本页]

作者: hbanyin    时间: 2010-11-09 14:58
标题: 钩子的初始化
我想了解钩子函数的初始化问题  但是一直搞不太明白  我用的是linux2.6.28.10版本的内核  内核中关于hook_init的定义是这样的:
static void hook_init(void)
{
        static int first = 1;
        if (first) {
                first = 0;
                hook_base = ioremap(HOOK_MEM_BASE_ADDR, 8192);
        }
}
我想知道这段代码是什么意思
例如其中的8192是什么?
为什么初试first赋值为1?
hook_base是什么?
作者: Godbach    时间: 2010-11-09 17:47
这个是那个文件里的。
作者: hbanyin    时间: 2010-11-09 18:47
arch/cris/arch-v32/mach-a3/vcs_hook.c, line 22
作者: Godbach    时间: 2010-11-09 19:13
你想分析什么东西,是 Netfilter 的 hook 函数吗?
作者: hbanyin    时间: 2010-11-09 19:17
对  我现在正在分析hook函数  我想知道上面那个函数初始化时都做了哪些操作
作者: 烟雾弹下的真实    时间: 2010-11-11 11:15
将一个IO地址空间映射到内核的虚拟地址空间上去,便于访问,8192是这个虚拟地址空间的大小;hook_base指向这个hook空间的首地址,得到这个空间的数据可以用首地址加offset的方式;
   为什么要定义局部静态变量first,可能是为了判断是否有可用的内存页吧。
作者: 烟雾弹下的真实    时间: 2010-11-11 11:23
错了错了,first定义为局部静态变量,当执行这个函数离开函数作用域后,first一致为0 直到程序结束才能释放。这样,hook_base = ioremap(HOOK_MEM_BASE_ADDR, 8192)在调用一次后就不会被重复调用了,因为程序结束前if(first)判断为假。
作者: hbanyin    时间: 2010-11-11 16:50
回复 7# 烟雾弹下的真实


    谢谢哈  你这么一说我好像明白多了。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2