吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2919|回复: 11
上一主题 下一主题
收起左侧

[系统底层] win32笔记二 进程的创建过程

  [复制链接]
跳转到指定楼层
楼主
huchen 发表于 2024-4-16 22:19 回帖奖励
本帖最后由 huchen 于 2024-4-22 00:13 编辑

之前的索引

进程的创建过程

什么是进程?

一个exe文件能算是进程吗?

不能,因为这是死的程序,也就是在内存中没有他的位置,他只是在磁盘中,当双击运行后,他在内存中展开,才算真正的进程

例如

打开资源管理器,这些就是进程,有名字,有唯一的PID等

进程提供程序所需的资源,如:数据、代码等

进程就好比是一个装修好的房子,提供各种家具,而住在房子里的人就好比线程,来使用这些资源,目前不涉及线程相关的内容

那到底进程长啥样?

我们用OD来附加一个正在运行的程序,或者说是进程

随便附加一个,然后点击Memory模块,这些就是进程提供的数据与代码,可以发现,最开始是从0x10000,开始的,怎么不从0开始?

每一个进程都有自己的4GB虚拟空间,而0~64K,即0000~0xFFFF

通常情况下是不会使用的,然后我们拉到最后

看到最后的地址是0x7FFE0000,欸不是有4GB吗,咋到这儿就结束了?

从0x80000000到0xFFFFFFFF之间这个被称作高2G,是给内核程序用的

所以,每一个进程都有自己的4GB虚拟空间,实际上说的是只有低2G才属于当前进程,因为高2G是共享的

在所以,每一个进程都有自己的4GB虚拟空间,这句话只是看起来是这样的

总之可以用一张表来展示

分区 x86 32位Windows
空指针赋值区 0x00000000 ~ 0x0000FFFF
用户模式区 0x00010000 ~ 0x7FFEFFFF
64KB禁入区 0x7FFF0000 ~ 0x7FFFFFFF
内核 0x80000000 ~ 0xFFFFFFFF

就像一张空头支票一样,名义上是4GB,实际却不是

倘若真的是4GB,那这么多进程,那内存不就炸了吗


这里解释一下为什么0000~0xFFFF是64KB

16进制的每一个数都是0~F共16个数,这里有四位,所以就是16的4次方,即16^4 =  65536,也就是排列组合的问题,然后知道1KB = 2^10B,所以65536/(2^10)= 64

所以称为64KB,其他的同理


在上面进程中,可以注意到,这些数据好像都是一块一块的,并且格式都差不多

这些进程,不是由一个文件组成的,而是由一堆相同类型文件组成的,那这个类型是什么呢,就是PE文件结构,PE文件的讲解,还请观看其他大佬的文章

这里可以看看,点击上面E模块,就在M模块的左边

这些就是PE文件,这些就是进程所提供的资源,可以理解成这些都是封装好了的资源

所以,进程就是由一堆PE文件所组成的

进程的创建步骤

1.任何进程都是别的进程创建的:会用到win API CreateProcess()函数

2.进程的创建过程

  1. 映射exe文件
  2. 创建内核对象EPROCESS
  3. 映射系统DLL(ntdll.dll)
  4. 创建线程内核对象ETHREAD
  5. 系统启动线程
    • 映射DLL(ntdll.LdrlnitializeThunk)
    • 线程开始执行

①:映射exe文件,在图中的用户区域

②:创建内核对象,每一个进程对象都有一个,这里不用深究,知道就行

③:映射系统DLL(ntdll.dll),任何一个exe文件都会用到系统的dll,也就是ntdll.dll

④:创建线程内核对象,创建进程的时候必须要创建至少一个线程,因为进程只是提供资源,而线程才是使用资源,没有线程,则该进程是没有意义的

⑤-1:映射DLL,启动之前还要映射dll,至于是什么,上面说过的一堆PE文件,就是映射这些(不一定只有dll),学了PE就知道了


总结

  1. 进程是由一堆PE文件组成的
  2. 进程只提供资源,不管如何使用
  3. 线程才是使用进程提供的资源

免费评分

参与人数 5吾爱币 +8 热心值 +5 收起 理由
solitary369 + 1 谢谢@Thanks!
silenter6speake + 1 用心讨论,共获提升!
Issacclark1 + 1 谢谢@Thanks!
jhoneyr + 1 + 1 用心讨论,共获提升!
willJ + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
yaphoo 发表于 2024-4-17 08:13
感谢分享,学习了
3#
w759003376 发表于 2024-4-17 09:42
4#
qwq23496 发表于 2024-4-17 14:13
5#
wcng520 发表于 2024-4-18 08:20
感谢大佬,讲的很好
6#
豪豪小朋友 发表于 2024-4-18 15:06
哈哈哈哈 支持了
7#
rmb788520 发表于 2024-9-5 09:04
感谢分享感谢分享
8#
光影由心 发表于 2024-9-7 08:52
谢谢分享,学习了。
9#
darkf 发表于 2024-9-13 18:56
学习学习进程、线程
10#
A学习的小菜鸟 发表于 2024-10-8 21:30
其实怎么说呢,进程就是空间,线程就是程序
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 16:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表