PE加载过程 FileBuffer-ImageBuffer
一、FileBuffer到ImageBuffer常见的误区
1.文件执行的总过程
我们知道一个硬盘上的文件读入到内存中(FileBuffer),是原封不动的将硬盘上的文件数据复制一份放到内存中
接着如果文件要运行,需要先将FileBuffer中的文件数据"拉伸",重载到每一个可执行文件的4GB虚拟内存中!此时称文件印象或者内存印象,即ImageBuffer
但是ImageBuffer就是文件运行时真正在内存中状态吗?或者说文件在ImageBuffer中就是表示文件被执行了吗?不!!!!!!
在ImageBuffer中的文件数据由于按照一定的规则被"拉伸",只是已经无线接近于可被windows执行的文件格式了!但是此时还不代表文件已经被执行了,因为此时文件也只是处在4GB的虚拟内存中,如果文件被执行操作系统还需要做一些事情,将文件真正的装入内存中,等待CPU的分配执行
所以不要理解为ImageBuffer中的状态就是文件正在被执行,后面操作系统还要做很多事情才能让Ima ...
PE简介
可移植可执行(Portable Executable,PE)格式。由于PE是Windows操作系统上使用的主要二进制格式,因此熟悉PE格式对在Windows操作系统上分析常见的二进制恶意软件非常有用。
PE是通用对象文件格式(Common Object File Format,COFF)的修改版本,在被ELF取代之前,COFF还在UNIX操作系统上使用。PE有时也被称为PE/COFF。让人困惑的是,PE的64位版本被称为PE32+。PE32+和原始PE格式相比只有很小的差异。
图3-1中显示的数据结构在WinNT.h中定义,该文件包含在Windows的软件开发工具包(Software Development Kit,SDK)中。
1.MS-DOS头和MS-DOS存根
MS-DOS是Microsoft在1981年发行的一款操作系统,Microsoft为了实现向后兼容,将其包含在二进制格式中。
引入PE格式时,有一段过渡期,即用户同时使用老旧的MS-DOS二进制文件和较新的PE二进制文件。为了避免在过渡期人们对此产生混淆,每个PE二进制文件都会以MS-DOS头开始,因此 ...
PE的基本概念
PE(Portable Execute)文件是Windows下可执行文件的总称,常见的有DLL,EXE,OCX,SYS等,事实上,一个文件是否是PE文件与其扩展名无关,PE文件可以是任何扩展名。
PE文件并不是作为单一内存映射文件被装入内存,Windows加载器(又称PE加载器)遍历PE文件并决定文件的哪一部分被映射,这种映射方式是将文件较高的偏移位置映射到较高的内存地址中。PE文件的结构在磁盘和内存中是基本一样的,但在装入内存中时又不是完全复制。Windows加载器会决定加载哪些部分,哪些部分不需要加载。而且由于磁盘对齐与内存对齐的不一致,加载到内存的PE文件与磁盘上的PE文件各个部分的分布都会有差异。
PE文件至少包含两个段,即数据段和代码段。Windows NT 的应用程序有9个预定义的段,分别为 .text 、.bss 、.rdata 、.data 、.pdata 和.debug 段,这些段并不是都是必须的,当然,也可以根据需要定义更多的段(比如一些加壳程序)。
在应用程序中最常出现的段有以下6种:
.执行代码段,通常 .text (Microsoft)或 ...