Skip to main content

进程与线程

在恶意软件开发领域,诸多代码注入防御规避技术是围绕着进程与线程展开的,因此我们首先需要理解进程与线程的相关概念。

进程与线程

Windows 进程是指当前运行在 Windows 主机上的程序或者应用的实例,每个进程都与其他进程隔离,并拥有由操作系统分配的私有资源。进程可以是用户或者操作系统开启的,消耗着如内存、磁盘空间等资源。

线程是进程内的最小执行单元,每个 Windows 进程由 1 个或多个线程并发运行。进程中运行的每个线程共享进程的内存和资源。 与进程不同,线程之间不是相互隔离的,可以直接与进程中的其他线程交互。

总之,进程是一个正在运行的程序,拥有操作系统分配的独自的资源,而线程是进程内的执行路径。进程中的多个线程共享进程的资源,但独立地并发地执行。因此,虽然一个进程可以在其中运行多个线程,但每个线程独立操作,执行自己的指令,这个概念是并发编程的关键,其中同时执行多个任务以提高程序的效率和性能。

 

进程内存

Windows 进程也使用内存来存储数据和指令。当进程创建时,会被分配内存,分配的内存量可以由进程本身设置。操作系统使用虚拟内存和物理内存来管理内存。通过创建可由应用程序访问的虚拟地址空间,虚拟内存允许操作系统使用比物理可用内存更多的内存。这些虚拟地址空间被划分为页,然后分配给进程。

进程可以有不同类型的内存:

私有内存:专用于单个进程,不能被其他进程所共享,这种类型的内存用于存储特定于进程的数据。
映射内存:可以在 2 个或多个进程之间共享,它用于在进程之间共享数据,例如共享库、共享内存段和共享文件。映射内存对其他进程可见,但不会被其他进程修改。
映像内存:包含可执行文件的代码和数据,它用于存储进程使用的代码和数据,例如程序的代码、数据和资源。 映像内存通常与加载到进程地址空间中的 DLL 文件相关。

 

PEB


TEB