运行机制 1、钩子链表和钩子子程: 每一个hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的hook类型关联的消息发生时,系统就把这个消息传递到hook子程。一些hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个hook子程或者目的窗口。最近安装的钩子放在链的开...
请问在编写了一个hook程序之后如何运行它,好象一般的hook程序都没有主程序,我在网上下了一个验证ARP报文的代码,请问如何编译执行它? 代码如下: unsigned int arphook_snd(unsigned int hooknum,struct sk_buff **skb,const struct net_device *in, const struct net_device *out,int (*okfn)(struct sk_buff*)) { struct arphdr *arp; struct net_device *dev; unsigned char * arp_ptr; unsigned char *sha, *tha; ...
在同一个hook点上注册不同的两个表时,比如在LOCAL_IN这个点上注册filter和nat两个表,分别往这两个表里面添加规则。 当有数据经过LOCAL_IN时激活这个点上的hook函数,然后去匹配表的规则, 问题:因为是在同一个点注册了两个表,在hook函数被激活后去匹配规则的时候是两个表的规则都去匹配的吗? 是这样吗? --》先从优先级高的表开始匹配,然后是次高的表开始匹配?
我编写了一个hook函数,并且已经将其加入到模块之中了,但是怎样和我的应用文件联系起来呢? hook函数如下: static unsigned int receive_hook(unsigned int hooknum,struct sk_buff ** pskb,const struct net_device *in,const struct net_device *out,int (*okfn) (struct sk_buff *)) { return NF_ACCEPT; } struct nf_hook_ops user_hook_ops={ {NULL,NULL}, receive_hook, THIS_MODULE, PF_INET, NF_IP_PRE_ROUTING, ...
在init函数里面注册了一个hook: struct nf_hook_ops nfho; void init(){ nfho.hook = intercept_pkts; nfho.pf = AF_INET; nfho.hooknum = NF_INET_FORWARD; nfho.priority = NF_IP_PRI_FIRSR; ret = nf_register(&nfho); ....... } initercept_pkts(unsigned int hooknum,struct sk_buff *_skb,.........) { printk("hooknum = %d\n",hooknum); ...
android通过platform_frameworks_base下的WindowsManagerService来管理和分发系统触摸和按键等事件,如果想捕获系统所有事件,怎么才能实现?怎么可以调用InputManager,怎么才能将程序注册成接受所有事件的InputChannel? 如果调用了platform_frameworks_base下的类或方法,怎么才能与platform_frameworks_base一起编译呢? 有人知道么?非常感谢!
本帖最后由 wsgtrsys 于 2013-08-18 19:26 编辑 因为需要对内核中的一个函数劫持后,修改其中的一个变量 。 是参考这个篇文章的的做法。 http://jan.stancek.eu/mips_function_runtime_detour 原来曾经在2.6.16的内核上劫持成功,但最近在2.6.35的内核上就不行了。 2.6.35内核的代码部分仿佛是只读的,不能修改原来的函数的机器码。 有两个问题: 1、mips上是不是有类似于x86上的cr0寄存器? 2、如果不是用cr0进行保护,是不是...
能否在同一个hook点,同一个优先级上,注册多个hook函数。看了一下代码,MS支持。但是感觉这样意义不大。 net/netfilter/core.c中 [quote]int nf_register_hook(struct nf_hook_ops *reg) { struct list_head *i; spin_lock_bh(&nf_hook_lock); list_for_each(i, &nf_hooks[reg->pf][reg->hooknum]) { if (reg->priority < ((struct nf_hook_ops *)i)->priority) break; } list_add_rcu(®->list, i->prev); spin_un...
我自己做实验,在nf_register_hooks将自己定义的、包含了hook函数,hook点的nf_hook_ops结构体注册到系统中后,一旦有符合条件的包出现,系统都会打印出相应的语句。 但是在看源码的时候,经常看到有如下的调用方法: return NF_hook(PF_INET, NF_INET_PRE_ROUTING, skb, dev, NULL, ip_rcv_finish); 很不理解。难道 ip_rcv_finish 没有用 nf_register_hooks 注册进系统吗? 如果注册了,应该就直接...