WIN32 - 进程

进程–操作系统的器官

现在的操作系统都是多进程的操作系统1587613825378

1.什么是进程?

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

​ 程序运行的状态和进程没有关系,可以看成是空间状态。

​ 现实生活类比,进程相当于房子,房子里边有各种各样的资源(桌子、椅子、电脑)。线程相当于使用这些资源的人。

1. 验证进程是一个空间的概念
 ![1587614214080](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vc210bGcvUGljR28vcmF3L21hc3Rlci9pbWcvMjAyMDA1MTMwMDA3MDcucG5n?x-oss-process=image/format,png)
 打开一个程序,用DTDEBUG附加它。
2. 一个进程地址范围 0~FFFFFFFF = 4 GB 但是一个进程只用低2GB的进程空间 0~7FFFFFFF ,高2GB的进程空间80000000 ~ FFFF FFFF 是操作系统内核使用的。 

2.进程内存空间的地址划分

1587615279749

  1. 空指针赋值区:从来没有人使用,操作系统也没有使用。
  2. 用户模式区:我们使用的拉~
  3. 64KB禁入区:我们代码跑不到哪儿,操作系统也没有使用。(用户空间的前后64KB都没有使用)
  4. 内核

在Windows里,这些内存空间是虚拟的内存,名义上有4GB,而实际上分配的远远没有4GB,只有线程真正使用的时候才会真正分配。(段和页的管理)。

4GB的进程 就 只由一个文件组成吗?

​ 不是的,一个空间进程 由多个文件组成,exe和各种dll.

这些程序都遵守PE文件结构 DLL,EXE


3.一个程序如何变成进程?

### 进程创建的过程:

一个进程 都是由别的进程,创建出来的。 也就是说进程不可能平白无故的出来。

在windows下,双击运行程序,都是由explorer.exe 来创建你双击程序的进程的。

  1. 任何进程都是别的进程创建的:CreateProcess()

  2. 进程的创建过程

    1. 映射exe文件
    2. 创建内核对象EPROCESS
    3. 映射系统dll(ntdll.dll)
    4. 创建 线程内核对象ETHREAD
    5. 系统启动线程(一个进程必须有一个线程)
      1. 映射DLL(ntdll.LdrInitializeThunk)
      2. 线程开始执行

    1587628983354


创建进程

  1. 进程的创建 CreateProcess()

    BOOL CreateProcessA(
      LPCSTR                lpApplicationName,  //name of executable module
      LPSTR                 lpCommandLine,		//command line string
      LPSECURITY_ATTRIBUTES lpProcessAttributes, //SD
      LPSECURITY_ATTRIBUTES lpThreadAttributes,	 //SD	
      BOOL                  bInheritHandles,	//handle inheritance option
      DWORD                 dwCreationFlags,	//creation flags
      LPVOID                lpEnvironment
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值