进程内存空间地址划分
- 每个进程有4GB虚拟内存空间(实际只有2G:也就是低2G空间的用户模式区)。
- 进程的用户模式区低2G空间前64KB与后64KB是没有使用的。
- 每个进程的内核空间是同一份,是公用的。
分区 | x86 32位Windows |
---|---|
空指针赋值区 | 0x00000000 - 0x0000FFFF |
用户模式区(低2G) | 0X00010000 - 0x7FFEFFFF |
64KB禁入区 | 0x7FFF0000 - 0x7FFFFFFF |
内核(高2G) | 0x80000000 - 0xFFFFFFFF |
进程的创建过程
任何进程都是别的进程创建的:CreateProcess()
进程的创建过程:
映射EXE文件。
创建内核对象EPROCESS。
映射系统DLL(ntdll.dll)。
创建线程内核对象ETHREAD。
系统启动线程:
映射DLL(ntdll.LdrInitializeThunk)。
线程开始执行。