进程/线程 的实际入口
进程/线程 的实际入口我之前会以为。进程装载,就只是是创建一块内存,然后把程序映射到这块内存,然后初始化寄存器等,再把 pc 设置到 pe 中的 enter point 中。
很显然我之前犯了形而上学的错误,认识应该是递进的,把细节忽略了然后自以为是的进行总结,结果就是学的不深入,学了和没学似的。
这是一个可以从软件讲到操作系统,再从操作系统讲到硬件,再回到软件的一个复杂的过程,虽然 windows 是闭源的。
为了分析 windows 创建进程的过程,首先要讲清楚一些数据结构和 windows api 的一些命名方式
windows api name convention
Prefix Description
Alpc Advanced Local Procedure Calls
Cc Common Cache
Cm Configuration manager
Dbg Kernel debug support
Dbgk Debugging Framework for user mode
Em Errata manager
Etw Event Tracing for Win ...
WIN HANDLE
首先什么是 HANDLEIt’s an abstract reference value to a resource, often memory or an open file, or a pipe. (来自stackoverflow)我个人的理解,HANDLE 就是一种为了统一资源的封装,所有的资源,内存,进程,甚至各种各样的设备,都可以通过 windows api,通过 handle 操作,拥有了 handle,就拥有了资源的操作权。比如说,在 windows 创建进程的过程中,通过 api monitor 可以很好的知道操作系统在用户态和内核交互的过程中做了什么,我们会发现为了创建一个进程,我们会获取一段内存,然后再把程序映射进去,对内存的操作也都是通过 HANDLE 传入传出实现的。
被面试官问了 HANDLE 和 PID 的关系因为没有仔细分析,或者说是看过类似的资料,只能口糊一个。
HANDLE 和 PID 都是 32 位无符号整数。
系统,用户根据 pid 唯一确定一个进程可以通过 handle 以及 每个进程的句柄表 获得内核对象的实际地址,是一种间接的映射。
曾经以 ...