Windows内核原理研究——进程创建

进程可能是用户接触的Windows系统中最多的部分了,对于Windows系统而言,进程是一个独立的地址空间可以为线程提供一个独立的执行环境,

也就是说

进程=

  • 独立的地址空间
  • 一个进程内核对象

线程=

  • 一个线程自己的栈
  • 一个线程内核对象

当然这个栈是在进程的地址空间中。那么,也就是说线程才是真正“干活”的东西,进程只不过是一些资源的集合而已。只能说是“原材料”。

在我学习Windows内核以前一直觉得进程的种种特性很神奇,比如说地址空间独立是怎么实现的呢?我们的电脑使用的都是同一块内存怎么能实现独立呢?

再比如说进程是怎么进行管理和实现那些功能的?这些疑问随着我的学习过程不减反增,尤其是当我接触了用户层的一些安全知识后,举个例子:游戏外挂,

外挂自身是一个进程,它要去读游戏进程的数据,那就是跨越进程了。可是这是怎么实现的呢?

事实上一切问题的答案都可以在内核中找到答案,因为内核才是真正的一起东西的管理者。我们只要知道了内核是怎么做的那么一切问题都迎刃而解了。

事实上Windows进程管理器处于Windows内核执行体,进程管理器实际上并不存在这么一个“东西”,所谓管理器是指一系列函数和程序的抽象集合。

我先提出几个疑问,然后通过解答这几个疑问来叙述Windows系统是怎么操作进程的。

  1. 凡事都有第一次,那么Windows系统中第一个进程是怎么创建的?或者说没有进程的情况下,系统怎么创建进程?事实上这涉及系统初始化的知识。
  2. 进程是怎么创建的?系统怎样去管理进程?

注意的一点是,创建一个进程是一系列的工作而不是单单创建了进程这么个东西。打个比方,我双击记事本程序,这个进程运行起来了。运行起来了包含着有线程创建了,有模块加载了等等。

提到创建进程,只要是接触过Windows编程的人就会想到CreateProcess函数,熟悉驱动开发的人也会知道NtCreateProcess函数,这个函数正是进程创建的重要函数之一,注意是之一。原因上面已经说了,创建进程是一系列的过程而不只是新建一个进程结构而已。

时间: 2024-10-12 16:58:54

Windows内核原理研究——进程创建的相关文章

Windows内核原理系列01 - 基本概念

1.Windows API Windows 应用编程接口(API)是针对WIndwos操作系统用户模式的系统编程接口,包含在WindwosSDK中. 2.关于.NET .NET由一个被称为FCL的类库和一个被称为CLR的公共语言运行库组成.FCL是建立在CLR之上的,而CLR是一组标准的COM服务器,提供了垃圾回收,即时编译类型检验等特性.由于CLR的这些特性,使得开发人员的生产效率得以提高..NET框架与组建的关系如下: .NET应用程序 用户模式(托管代码) —————————— 类库(FC

Windows内核原理-同步IO与异步IO

目录 Windows内核原理-同步IO与异步IO 背景 目的 I/O 同步I/O 异步I/O I/O完成通知 总结 参考文档 Windows内核原理-同步IO与异步IO 背景 在前段时间检查异常连接导致的内存泄漏排查的过程中,主要涉及到了windows异步I/O相关的知识,看了许多包括重叠I/O.完成端口.IRP.设备驱动程序等Windows下I/O相关的知识,虽然学习到了很多东西,但是仍然需要自顶而下的将所有知识进行梳理. 目的 本片文章主要讲解同步I/O与异步I/O相关知识,希望通过编写本篇

windows内核代码之进程操作

[toc] 一丶简介 整理一下windows内核中.常用的代码.这里只整理下进程的相关代码. 二丶 windows内核之遍历进程 内核中记录进程的结构体是EPROCESS结构.所以只需要遍历这个结构即可.标准方法可以使用ZwQuerySystemInformation函数.使用SystemProcessInformation功能号. 另外也有很多种枚举进程的方法比如找到EPROCESS结构进行枚举的.(CPU结构体 KPCR)等等.不过兼容性都是不太好.另一种方法是枚举句柄表 PspCidTab

windows 内核下获取进程路径

windows 内核下获取进程路径 思路:1):在EPROCESS结构中获取.此时要用到一个导出函数:PsGetProcessImageFileName,申明如下: NTSYSAPI UCHAR *    PsGetProcessImageFileName(    __in PEPROCESS Process    ); 此函数获取的是一个简单的进程名,并不是绝对路径. 2):ZwQueryInformationProcess. 要想获取进程的绝对路径,可用一个未公开的函数:ZwQueryInf

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

一 关于linux进程概念的补充 关于进程的基本概念这里不多说,把自己的学习所得作一些补充: 1. 在linux内核中,系统最多可以有64个进程同时存在. 2.linux进程包含的关键要素:一段可执行的程序:专用的系统堆栈空间:内核中它的控制块(进程控制块):独立的存储空间. 3. 系统的第一个进程由系统初始化生成. 4. 内核通过一个唯一的进程标识号PID来标识每个进程. 5. 用数据结构task_struct表示一个进程,包括进程的属性和状态.task_struct 结构中的指向前后进程的指

Windows Kernel Way 1:Windows内核调试技术

掌握Windows内核调试技术是学习与研究Windows内核的基础,调试Windows内核的方式大致分为两种: (1)通过Windbg工具在Windows系统运行之初连接到Windows内核,连接成功之后便可以调试,此时即可以调试Windows内核启动过程,又可以在Windows启动之后调试某内核组件或应用程序.或使用Windbg的Kernel debugging of the local mechine功能,在Windows系统完全启动之后,调试Windows内核组件或应用程序.这种方式需要配

说说windows内核中为什么要隐藏线程?(附源码)

一.论:接着上一篇来谈谈,进程都能隐藏,单独隐藏进程中的某一个线程干啥?二.需求:需求源动力,就是有需求,除了正儿八经热爱喜欢专研的朋友,无利无名.无食而学日不思,真的让人很尊敬.三.打个比方:当你想要去实现隐藏线程的时候你有可能在干什么?做一个工具?或者说是学习?通过隐藏线程可以更深入理解windows内部原理?进程与线程之间的关系?一个正常进程里面包含恶意线程?这是一个很棒的学习方式.也许你会用它来做一些事情,以前想写过一个类似于ARK的工具,才有了学习的需求及动力.但是还没有实际的环境去应

Windows内核学习笔记之浅析系统调用

在潘老师<Windows内核原理与实现>一书,解析了Windows应用程序发出的系统调用.图示如下. 从图可看出,系统调用所提供的服务(函数)是运行在内核中的,也就是说,在"系统空间"中. 用户空间与系统空间所在的内存区间不一样,同样,对于这两种区间,CPU的运行状态也不一样. 在用户空间中,CPU处于"用户态":在系统空间中,CPU处于"系统态". CPU从系统态进入用户态是容易的,因为可以执行一些系统态特有的特权指令,从而进入用户

Windows内核之进程基本含义以及进程的创建

进程 1 进程的含义: 1.1   一个是操作系统用来管理进程的内核对象. 内核对象也是系统用来存放关于进程的统计信息的地方. 1.2   还有一个是地址空间,它包括全部可运行模块或DL L 模块的代码和数据.它还包括动态内存分配的空间. 如线程堆栈和堆分配空间. 2 操作系统启动应用程序的步骤 2.1 调用C/c++执行时的启动函数 启动函数总共4种,WinMainCRTStartup,wWinMainCRTStartup,mainCRTStartup,wmainCRTStartup. 启动函