Win32系统关键技术

版权声明:请多多关注博主哟~ https://blog.csdn.net/qq_37865996/article/details/87191292

0x01 Windows体系结构

Win32的含义一般指Windows 32位操作系统

英特尔的CPU从80386开始,出现了保护模式和实模式,两者的区别是进程内存是否受保护。这部分知识则是汇编语言中的知识了,涉及通用寄存器、物理地址和逻辑地址之间的映射关系。Win32是一种多任务系统,系统运行在保护模式下,但是仍使用实模式寻址。因此在系统启动中引导代码负责将CPU从初始的实模式转换为保护模式。

在操作系统中提供了四级特权集,呈现为一个环状,由内向外特权集逐渐降低,目前多使用Ring0(核心态)和Ring3(用户态)

Ntdll.dll在Win32系统中处于Win32子系统与系统内核之间,是Win32 API调用底层功能的工具,但只是一个空函数。真正的函数实现位于系统内核(Ntoskrnl.exe)中。

32位系统CPU的直接寻址空间为2^32B,即为4GB。其中高端2GB划分为内核空间,低端2GB划分为用户空间,分别分配给系统和用户态进程使用。地址空间指内存地址的范围,Windows使用虚拟内存,每个进程都被系统赋予独立的4GB虚拟地址空间。

0x02 内存管理机制

关于逻辑地址和绝对地址的讨论。

Windows的分页机制,这里牵扯到操作系统的有关知识。

地址转换。

IA32 CPU提供了段级和页级两个级别的内存保护,段级的内存保护主要包括类型检查、边界检查、可访问域检查和特权指令检查,页级的保护主要包括可访问域检查和类型检查。

虚拟内存是计算机提高物理内存利用率的一种内存管理技术。在Win32系统中,虚拟内存界面有三种状态:Free,Reserved和Committed。并因为工作必要,Windows提供了一种写时复制机制。

内存映射文件是Win32利用虚拟内存提供的文件快速访问机制,在处理大数据量的文件是非常有用。操作系统使用内存映射文件来装载.exe和.dll文件。如果多个进程使用同一个dll文件,物理内存只有一个副本。另外,内存映射文件也可以实现多个进程之间共享内存。

扫描二维码关注公众号,回复: 5237423 查看本文章

0x03 中断和异常

中断用于异步处理CPU外部时间,来源于CPU外部;宜昌市来源于CPU内部的同步时间,用于在指令执行过程中处理CPU检测到的条件。这部分知识在汇编语言和操作系统中均有详细介绍,在此不赘述。

0x04 存储和文件系统

硬盘物理结构。

硬盘分区结构中,硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等。每个盘片有两面,每个面都有一个磁头来进行区分。连续写入数据排列到一个圆周上,则为一个磁道,相同磁道号组成一个柱面。磁道可以划分为若干个扇区,计算机室以扇区为单位对硬盘读写。

主引导扇区位于整个硬盘的0磁道0柱面1扇区。主引导记录MBR使用其中的446B,即为偏移0~偏移1BDH,另外的64B有硬件分区表DPT使用,最后的2B是分区的结束标志。

MBR的主要作用是在系统硬件完成自检后检查分区表是否正确,并且帮助引导活动分区上的操作系统,最后将控制权交给OS启动程序。MBR通常可以实现扫描分区表查找活动分区,寻找活动分区的其实扇区,将活动分区的引导扇区读到内存,执行引导扇区的引导代码。

硬盘分区表DPT

扩展分区中的每个逻辑驱动器都存在一个类似MBR的扩展引导记录,称为虚拟MBR或扩展MBR。

FAT分区格式是微软最早支持的分区格式,分为FAT12、FAT16、FAT32。系统引导记录分为FAT32 DBR、FAT16 DBR和NTFS DBR。保留扇区是指从分区DBR扇区开始被系统保留不允许使用的扇区,FAT16和FAT32有不同的保留范围。

NTFS文件系统。NTFS具有较好的容错性和安全性,其主要结构是卷,有硬盘上的逻辑分区组成。NTFS文件系统没有特别为文件文件系统自身提供的额外空间。主控文件表MFT是NTFS中最重要的系统数据,由文件记录数组组成,磁盘卷上的每一个文件都有一个文件记录,并且大文件可能有多重记录。每个文件有一个文件引用号来表示。NTFS使用存储在MFT记录中的逻辑簇号,指向文件在此盘上的物理位置。NTFS将文件作为(属性,属性值)的集合来处理,每个属性由单个流组成。一个文件通常占用一个文件记录。在NTFS文件系统中,目录是它所包含的文件的名字索引和文件的引用的组合。

0x05 典型的可执行文件格式

.com文件,采用绝对映像,没有重定位信息,MS-DOS直接将文件映像从磁盘复制到内存,完成对其的加载,不做任何改变。加载时MS-DOS首先尝试为其分配内存,之后在该内存的前256B建立程序段前缀PSP。建立PSP后,MS-DOS开始在PSP后加载.com文件,设置SS、DS和ES为PSP的段地址,然后设置SP为0x0000创建堆栈。在其ASM构建方法中,需要将初始位置设置为0100H。

可移植文件格式。MS-DOS头部(MZ头部)占据PE文件的前64B,接下来是实模式残余程序,一般只是一句话。PE文件标志在PE文件头的前面,PE文件标志有MZ、NE、LE、PE00四种,文件头中的信息由操作系统或者应用程序使用,用来决定如何处理这个文件。PE格式总大量的使用所谓的相对虚拟地址,而RVA加上基地址才能获得真正的线性地址。224B的可选头部包含了关于可执行映像的重要信息,包括标准语和NT附加域。接下来是数据目录和节表。在之后的预定义节中,通常包含9个,分别是代码节、数据节、.bss节、资源节、导出节、导入节等。

在Windows中,系统在植入一个可执行程序时,PE Loader把磁盘中的文件映射到进程的地址空间,遍历PE并决定文件的哪一部分被映射。PE文件加载到内存后,内存中的版本称为模块。导出表和导入表关系密切,两者联合起来解决寻址外部符号的问题。

猜你喜欢

转载自blog.csdn.net/qq_37865996/article/details/87191292
今日推荐