Hook概念
Hook是伴随操作系统的产生而出现的概念,原来是系统开发者提供给系统应用开发者方便管理系统而产生的概念。目的是在系统调用过程中,其他代码可以选择性的干预系统函数的处理逻辑,已达到更灵活的程度。
其实不管是windows还是Linux,底层进行事件分发处理使用的都是消息机制,为什么要使用消息机制,这个和操作系统的演化有关。操作系统最开始出现的时候功能很单一,仅仅是用于计算,而且还不是并行计算(并行计算发生在中断概念提出之后)。就是一个单一的流程,大家可以类比一下流水线,从流水线的一端到另一端,操作系统需要定制好所有的内容,这个时候应用厂商没办法在上面做更多的扩展,这样很不方便。
后来Windows就在他们的操作系统执行流程中加入了一些节点,我们可以理解为一个口子。软件开发商可以根据自己业务需要在节点上添加自己想要的代码,然后执行完后调用这个节点的继续执行相关的代码,那么就相当于对操作系统的功能做了扩充,丰富了操作系统的能力。听起来这个Hook技术很正当,和我们现在理解的Hook用处差异很大,我们来看下Windows他们是怎么定义这个Hook技术的。
在 Windows中,钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子
|