0x01. 什么是进程?

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

进程扮演的角色仅仅是为当前程序提供资源,或者代码,这就是进程所提供的,当时程序运行的状态和进程没有关系,进程可以看做空间的概念

例子:

进程相当于一个房子,房子里面的东西,这些东西就是进程提供的;房子里面走来走去的人,和使用东西的人,就是线程

你看到的这些东西就是进程

找到最后发现到 0x7FFEF000结束(这里是个小Tips了)

一、内核空间分布:

  在4GB内存的操作系统中,高2G的给内存空间操作系统(也就是内核)使用,这部分内存空间所有进程共享。

  低2G的内存给各个进程使用,每个进程占有独立的内存空间,相互进程其内存之间并不影响。

所谓的进程不是一个文件组成,而是多个文件组成

0x02.进程的创建过程

1)、任何进程都是别的进程创建的



系统中的程序都是通过explorer.exe创建的,这个程序调用了CreateProcess()函数

2)、进程的创建过程

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

举个例子,我们点击 A.exe 就会调用 CreateProcess() 函数

第一步:映射EXE文件

通过上面的图片知道我们程序映射的话不能放前64k,也不能在后64k,但是其实PE中就有写到需要放到哪里

假设从这开始,然后我们画图,写入进程A

第二步:创建内核对象 EPROCESS

每个对象都有自己的 EPROCESS 进程对象,也就是结构体

(无需深究)

第三步:映射系统DLL(ntdll.dll)

也就是说,不管什么进程创建的时候,都会有个 ntdll.dll,然后继续把ntdll映射进去

第四步:创建线程内核对象 ETHREAD

每个进程中都会自动创建一个线程,跟进程一样,因为一个进程就得有一个线程,启动一个进程就有EPROCESS 结构体

然后进程自动创建一个线程对象 ETHREAD

第五步:系统启动线程

每一个进程都是由一堆PE来的,比如一个EXE带了一堆DLL,然而dll不是随便乱带的

因为PE创建中可能只使用到了 test.dll中的某个函数,但是 test.dll 可能又带了 love.dll中的东西

这时候发现进程只是一个空间的概念,真正用的人是线程

Win32之进程创建过程的更多相关文章

  1. linux内核学习之六 进程创建过程学习

    一 关于linux进程概念的补充 关于进程的基本概念这里不多说,把自己的学习所得作一些补充: 1. 在linux内核中,系统最多可以有64个进程同时存在. 2.linux进程包含的关键要素:一段可执行 ...

  2. 进程创建过程详解 CreateProcess

    转载请您注明出处:http://www.cnblogs.com/lsh123/p/7405796.html 0x01 CreateProcessW CreateProcess的使用有ANSI版本的Cr ...

  3. Android应用程序的进程创建过程

    目录 前言 步骤 step1 Ams发起请求startProcessLocked step2 Zygote收到请求 step3 handleChildProc -- 进入子进程的世界 step4 Ru ...

  4. windows进程/线程创建过程 --- windows操作系统学习

    有了之前的对进程和线程对象的学习的铺垫后,我们现在可以开始学习windows下的进程创建过程了,我将尝试着从源代码的层次来分析在windows下创建一个进程都要涉及到哪些步骤,都要涉及到哪些数据结构. ...

  5. Android应用程序进程启动过程的源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址: http://blog.csdn.net/luoshengyang/article/details/6747696 Android 应用程序框架层创 ...

  6. Android应用程序进程启动过程(后篇)

    前言 在前篇中我们讲到了Android应用程序进程启动过程,这一篇我们来讲遗留的知识点:在应用程序进程创建过程中会启动Binder线程池以及在应用程序进程启动后会创建消息循环. 1.Binder线程池 ...

  7. Android应用程序进程启动过程(前篇)

    在此前我讲过Android系统的启动流程,系统启动后,我们就比较关心应用程序是如何启动的,这一篇我们来一起学习Android7.0 应用程序进程启动过程,需要注意的是“应用程序进程启动过程”,而不是应 ...

  8. 理解Android进程创建流程(转)

    /frameworks/base/core/java/com/android/internal/os/ - ZygoteInit.java - ZygoteConnection.java - Runt ...

  9. 从整体上理解进程创建、可执行文件的加载和进程执行进程切换,重点理解分析fork、execve和进程切换

    学号后三位<168> 原创作品转载请注明出处https://github.com/mengning/linuxkernel/ 1.分析fork函数对应的内核处理过程sys_clone,理解 ...

随机推荐

  1. 刷题[RCTF 2019]Nextphp

    前置知识 一些关于php7.4版本需知: 1.FFI扩展:ffi.cdef 其中还有这样一段话 如果ffi.cdef没有第二个参数,会在全局查找,第一个参数所声明的符号.意思就是其在不传入第二个参数时 ...

  2. 关于JAVA的垃圾回收机制

    使用JAVA编程时,几乎不需要考虑"内存泄漏"的问题,这也是JAVA相较于C++的一个优点. 最近在看<Java编程思想>(第四版,听说第五版有点牛逼....),里面讲 ...

  3. HTTP协议学习之Request学习

    在开始前,我们首先对HTTP协议做个简单的了解 HTTP协议(Hyper Text Transfer Protocol) 超文本传输协议 名词非常的高大上,如果学过计算机网络这门课(再如果还有一点印象 ...

  4. 源码分析 Kafka 消息发送流程

    Futuresend(ProducerRecord<K, V> record) Futuresend(ProducerRecord<K, V> record, Callback ...

  5. 自定义带边框TextView--边框粗细不一的问题

    自定义带边框TextView 给textview加边框 最low的做法.textview外层套一层布局,然后给布局加边框样式(这么弱的做法,不能这么干) 自定义控件 canvas.drawLines ...

  6. MySQL触发器初试:当A表插入新记录,自动在B表中插入相同ID的记录

    今天第一次用MySQL的触发器,怕忘了,赶紧写篇博客记录一下. 废话不说,先上语法: 1 CREATE TRIGGER trigger_name 2 { BEFORE | AFTER } { INSE ...

  7. Ajax接收int类型乱码

    在Ajax返回值类型是 "text" 的时候,接收int类型时可能会出现ၧ 解决方法:将int转为String即可 int money =100; String s = Integ ...

  8. sqli-labs第三关 详解

    通过第二关,来到第三关 我们用了前两种方法,都报错,然后自己也不太会别的注入,然后莫名的小知识又增加了.这居然是一个带括号的字符型注入, 这里我们需要闭合前面的括号. $sql=select * fr ...

  9. P 3396 哈希冲突 根号分治

    Link 据说这是一道论文题????.具体论文好像是 集训队论文<根号算法--不只是分块> 根号分治的裸题. 首先我们考虑暴力怎么打. 先预处理出每个模数的答案,之后再 O(1) 的回答, ...

  10. 完全小白入门:python的下载和安装

    1. 打开官网www.python.org,选择Downloads