版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37764129/article/details/83347065
一、模块、进程、线程
1.1 模块
一段可执行的程序(包括EXE和DLL),其程序代码、数据、资源被加载到内存中,由系统创建一个数据结构来管理它。这段程序就是一个模块。这里所说的数据结构(Module Database,即(MDB)),其实就是PE格式中的PE表头。
1.2 进程
进程主要表达“拥有权”的概念,就是一大堆拥有权的集合。进程拥有地址空间(由memory context决定)、动态配置而来的内存、文件、线程和一系列的模块。操作系统使用一个所谓的Process Database(PDB)数据结构,来记录(管理)它所拥有的一切。
1.3 线程
线程主要表达模块中的程序代码的“执行事实”。系统也是以一个特定的数据结构(Thread Database,TDB)记录线程的所有相关数据,包括线程局部存储空间(Thread Local Storage,TLS)、消息队列、handle表格、地址空间等。
1.4 进程与线程的关系
通常进程以一个线程(称为主线程)作为开始,根据需要,进程可以产生更多的线程(利用CreateThread),让CPU在同一时间执行不同段落的码(这是幻觉)。一颗CPU是通过调度器来实现“多个线程同时工作”——它以一个硬件定时器和一组复杂的游戏规则,在不同的线程之间做快速切换操作。以Windows 9x和Windows NT而言,在非特殊情况下,每个线程被CPU照顾的时间是20个milliseconds。