Hook原理分析

首先说说这个技术的实现环境,大家都知道windows的近几个版本都是使用了消息循环机制的,所谓的消息循环机制就是在windows上跑的各种程序之间和windows 之间的交互都是通过消息实现的,这里特指的是windows 和应用程序之间而不是各个程序之间,既然提到了消息,那就说可以截获消息,这里截获消息处理消息的过程就是消息钩子。

简单说下windows消息队列,其实每一个IO操作,控制操作都可以看作是一种消息,这在DOS系统中是采用中断的形式来处理的(现在部分交互改成windows消息机制了),应用程序发出消息->由Windows消息队列接受消息->根据已有注册的消息处理函数,分发给对应的消息处理函数(如果有的消息找不到处理函数,就会由系统接管该消息)->返回消息处理或者结束一次消息通讯,但是这个整个过程中windows做的就是始终监听是否有消息需要转发,确保消息转发和处理的及时性。

实现原理:
每一个Hook程序都有一个索引指针,这个指针是被串在一个由系统来维护的钩子链表上,这样系统就是可以把获得的消息和回调函数对应起来(注册Hook处理程序的时候都指定了要处理的消息类型)。当有对应的消息过来的时,系统我就把该消息传递当对应的Hook程序,由Hook 处理该消息,也可以修改消息,最后可以把消息传递下去也可以结束消息循环,当然一个程序可以被注册多个消息处理函数,这些函数会根据调用哪呢?其实是最早挂载的钩子会在最晚执行(队列结构),每一次销毁一个Hook程序,就会更新一下钩子链表(这里不要求按顺序删除钩子)࿰
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值