zoukankan      html  css  js  c++  java
  • 钩子学习笔记

    1.参考、学习《Micrsoft 的Hook专题》
    2.重点内容:
    (1)钩子实际上一个处理消息程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递

    (a)钩子是程序段(处理消息的程序段);
    (b)钩子由操作系统挂入操作系统中;
    (c)钩子在消息传送以目标前被钩子程序段拦截;
    (d)钩子用途:改变消息、知晓但不处理、中止。

    (2)每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函 数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者 修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加 入的先获得控制权。
    Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。
    钩子子程是一个应用程序定义的回调函数(CALLBACK Function),不能定义成某个类的成员函数,只能定义为普通的C函数。用以监视系统或某一特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。

    (a)每一种Hook,而不是每一个(钩子的类型,即它处理的消息类型 ),都有一个指针列表,即钩子链表;系统来维护的。
    (b)列表指针指向Hook回调函数.
    (c)回调函数,不能是类的成员函数,但不知道能不能支持class function/procedure 或 static.
    (d)钩子卸载,便释放内存,更新整个Hook链表。
    (e)被安装钩子的程序结束,则系统会自已卸载钩子。
    (f)分系统钩子和线程钩子。

    (3)略

     
  • 相关阅读:
    loj#6433. 「PKUSC2018」最大前缀和(状压dp)
    PKUWC2019游记
    10. Regular Expression Matching
    9. Palindrome Number
    8. String to Integer (atoi)
    7. Reverse Integer
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays
    3. Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/646019.html
Copyright © 2011-2022 走看看