进程线性是在多任务操作系统下对程序(运行中)更专业的名称。实际上,现计算机上运行的程序是由一个进程多个线程组成运行。什么是组成?往后看。
从操作系统的角度来说,每个进程又称为一个任务。在CPU手册中,任务 又指代线程,比如TSS(任务转态段)就是使用"任务"指代线程。是不是感觉实际上就是一段描述型的结构体?
都说c语言是计算机基础,拥有更快计算机运算能力,在很多单片机上都是使用c语言做的控制,在更为精密的计算机上也是如此。学过汇编,底层二进制的都知道,在底层只有0101
,编程语言中的字符串等基本类型,实际上都只不过是类似于C语言中的结构体。而"进程"就是一个结构体,这个结构体给二进制结构做了界限,用来更方便地组织和分配系统资源。
以windows系统为例,每个进程都拥有如下资源
1、进程空间
2、全局进程id,PID
3、一个可执行影像(image),也就是该进程的程序文件(可执行文件)在内存中的表示
4、一个或多个进程
5、一个位于内核空间中的名为EPROCESS(进程执行块)的数据结构,记录进程的关键信息
6、一个位于内核空间的`对象句柄表`
7、一个用于描述内存目录表起始位置的基地址,简称页目录基地址,保证当前进程的虚拟地址被翻译成正确的物理地址
8、一个位于用户空间中的进程环境块(PEB)
9、一个访问令牌(access token),用于表示该进程的用户、安全组以及优先级
windbg打开实验文件,随便哪个附加,加载模块和符号.在命令行中执行!process 0 0,列出系统中所有进程。
!process 0 0的第一个参数用来指定要显示的进程ID,0代表所有进程。第二个参数用来指定要显示的进程属性,0代表只显示最基本的进程属性
SessionId是指该进程所在的Windows会话(session)的ID号。具体作用于不同登录用户的不同会话。
Cid指ID,又叫Client ID。用来标识进程的一个整数,主要用来寻找用户态函数地址。
ParentCid是父进程的进程ID,即创建该进程的那个进程的进程ID
DirBase描述的是该进程顶级页表的位置,即当CPU切换到该进程执行时,寻找真实物理地址的位置。不同分页方式有着不同的分页寻址方式。
ObjectTable的含义是该进程的内核对象和句柄表格。在Windows系统使用这个表格将句柄翻译为指向内核对象的指针。
HandleCount为该进程所使用的句柄个数,也就是ObjectTable所包含的表项数。
经过试验,可知,在windows操作系统中,进程实际上就是一块结构体,而运行这块结构的系统也是一大块结构体。
其中最重要的是进程在windbg中的描述,及其代表的含义。
原文:https://www.cnblogs.com/cc10100100010/p/14855160.html