0x01. 什么是消息?
当我们点击鼠标的时候,或者当我们按下键盘的时候,操作系统都要把这些动作记录下来,存储到结构体中,这个结构体就是 消息
比如我们点击运行程序,是通过消息队列获取,通过explorer.exe创建进程,运行程序,然后进程中至少有一个线程。这就是一个
程序执行运行的流程,我们电脑都是由方块组成的,所以它这边会获取坐标,我们想移动到哪,都会有一个坐标,这个看分辨率
0x02. 消息队列:每个线程只有一个消息队列
因为我们没进0环去看,所以我们就看这张图,在之前就讲了进程和线程,所以了解起来比较简单
进程、线程都会在内核中有个结构体,然后这张图左边是用户层,右边内核层
假设进程A有两线程,然后我们点击的消息,都是存储在线程的,所以消息队列是和线程相关,消息队列和线程是 1 对 1的关系,2个线程
就两个消息队列
比如我们点击个程序,我们要退出,首先是操作系统捕获,然后把捕捉的动作发送到线程里面的消息队列里,然后执行
0x03. 窗口与线程
比如我们在这点击这个 X,为什么会退出呢?而不是别的程序做出反应呢?
我们先点击了这个 X,操作系统捕获到了你这个动作,然后会把这个动作封装到结构体里面,操作系统在底层会遍历
所有窗口列表,看要给谁。最后找到了这个对应的窗口对象了,知道要给这个 shellcode.exe。我们就要找到这个窗口对象
对应的线程里,然后存储到消息队列中
windows遍历窗口对象,通过窗口对象里面的成员找到线程对象,找到线程对象后因为到线程里面也有一个消息队列
这就是一个消息的流程,一个线程可以有很多窗口,但是还是会存储到消息队列里面的