0x01. 什么是消息?

当我们点击鼠标的时候,或者当我们按下键盘的时候,操作系统都要把这些动作记录下来,存储到结构体中,这个结构体就是 消息

比如我们点击运行程序,是通过消息队列获取,通过explorer.exe创建进程,运行程序,然后进程中至少有一个线程。这就是一个

程序执行运行的流程,我们电脑都是由方块组成的,所以它这边会获取坐标,我们想移动到哪,都会有一个坐标,这个看分辨率

0x02. 消息队列:每个线程只有一个消息队列

因为我们没进0环去看,所以我们就看这张图,在之前就讲了进程和线程,所以了解起来比较简单

进程、线程都会在内核中有个结构体,然后这张图左边是用户层,右边内核层

假设进程A有两线程,然后我们点击的消息,都是存储在线程的,所以消息队列是和线程相关,消息队列和线程是 1 对 1的关系,2个线程

就两个消息队列

比如我们点击个程序,我们要退出,首先是操作系统捕获,然后把捕捉的动作发送到线程里面的消息队列里,然后执行

0x03. 窗口与线程

比如我们在这点击这个 X,为什么会退出呢?而不是别的程序做出反应呢?

我们先点击了这个 X,操作系统捕获到了你这个动作,然后会把这个动作封装到结构体里面,操作系统在底层会遍历

所有窗口列表,看要给谁。最后找到了这个对应的窗口对象了,知道要给这个 shellcode.exe。我们就要找到这个窗口对象

对应的线程里,然后存储到消息队列中

windows遍历窗口对象,通过窗口对象里面的成员找到线程对象,找到线程对象后因为到线程里面也有一个消息队列

这就是一个消息的流程,一个线程可以有很多窗口,但是还是会存储到消息队列里面的

最新文章

  1. CSS3魔法堂:背景渐变(Gradient)
  2. 51nod 1297 管理二叉树
  3. C++实现日期类(Date类)
  4. 通过注册表查找oracle_home的位置
  5. 【noip模拟】考试总结
  6. C#关于编码、解码相关问题
  7. 使用APPLICATION制作缓存,转存一下,有一段写的还可以。
  8. Flex 事件机制
  9. 小谷的战斗Jquery(三)--水平和垂直菜单
  10. Windows下C语言的Socket编程例子(TCP和UDP)
  11. java 集合中将元素倒序排列
  12. htmlunit 导致高cup占用的坑
  13. 3.复杂的viewpager
  14. 给Ubuntu18.04安装mac os主题<转载>
  15. Java 获取并计算程序执行时间
  16. java框架---->Xstream的使用(一)
  17. List的定制排序 包括使用lambda表达式来实现的方法
  18. C# 时间戳与当前时间互相转换
  19. cobbler上部署centos系统修改网卡地址成eth0
  20. FactoryBean

热门文章

  1. Docker数据卷和数据卷容器
  2. win10病毒和威胁防护无法重新启动解决方法
  3. 性能测试Jmeter安装
  4. 基础篇:深入JMM内存模型解析volatile、synchronized的内存语义
  5. Kafka和RocketMQ底层存储之那些你不知道的事
  6. spring @value和@@PropertySource注解简单使用
  7. nginx 1.12安装
  8. Git入门教程,详解Git文件的四大状态
  9. IP基础知识
  10. 【CSP2019-J】游记