PE文件详解-----PE文件的简介

一.PE文件的背景介绍

 如今的编程绝大部分都是建立在操作系统上的程序设计,那么深入理解操作系统对于一个程序员来说是至关重要的。当我们运行一个程序,这个程序从编写到运行到第发生了一些什么呢?了解这些对于优化程序性能,深入理解编程,底层编程,安全编程都是需要熟练掌握的。其中涉及到的主题有虚拟内存管理、寻址方式、虚拟文件系统、多线程、进程通信、进程地址空间等等。那么这些跟PE文件有什么关系呢?实际上,PE文件是一种文件格式的规范,在windows系统上运行的可执行文件的格式exewindows系统的核心机制DLL动态链接库)等等都是PE文件的格式。了解PE文件的格式对于理解操作系统是至关重要的,所以我们需要深入地去理解分析PE文件,这是本文的意义所在。


二.PE文件的定义

 在win32平台下,微软引入了一种叫PE(Protable Executable)的可执行格式。常见的EXE、DLL、OCX、SYS、COM都是PE文件。从某种意义上讲,可执行文件的格式是操作系统本身执行机制的反映。虽然可执行文件格式并不是程序员的首要任务,但是这种工作能够积累大量的知识,有助于对操作系统的深刻理解。

三.相关概念解释

1.虚拟存储器:

具有层次结构存储器计算机系统中,自动实现部分装入和部分替换功能,能从逻辑上为用户提供一个比物理贮存容量大得多,可寻址的“主存储器”。虚拟存储区的容量与物理主存大小无关,而受限于计算机的地址结构和可用磁盘容量。

2.进程地址空间:

每一个进程都具有自己独立的地址空间,32位系统中进程的地址空间为4G。这个独立地址空间是虚拟出来的,操作系统通过使用VMA来对进程的地址空间进行管理。

3.装载PE可执行文件的过程

(1)先读取文件的第一个页,在这个页中包含了Dos头,PE文件头和段表。

(2)检查进程地址空间中目标地址(这个目标地址就是PE头中的一个字段ImageBase,记录的是PE文件装载的首选地址)是否可用。如果不可用,则另选一个装载地址。

(3)使用段表中提供的信息,将PE文件中所有的段映射到地址空   间中相应的位置。

(4)若装载地址不是目标地址,则进行Rebasing

(5)装载所有PE文件所需要的DLL文件。

(6)对PE文件中的所有导入符号进行解析。

(7)根据PE头中指定的参数,建立初始化堆和栈。

(8)建立主线程并且启动线程。

PE文件中与装载相关的只要信息都已包含在PE扩展头(PE Optional Header)和段表。


4.虚拟内存的实现方法与过程

(1)当一个应用程序被启动时,操作系统就创建一个新的进程,并给每个进程分配2G的虚拟地址(不是内存,仅是地址)。

(2)虚拟内存管理器将应用程序的代码映射到那个应用程序的虚拟地址中的某个位置,并把当前所需要的代码读取到物理地址中。

(3)如果使用动态链接库(DLL,DLL也被映射到进程的虚拟地址空间,在需要的时候才被读入到内存中。

(4)其他项目(例如数据,堆栈) 的空间是从物理内存中分配的,并被映射到虚拟地址空间中。

(5)应用程序通过使用它的虚拟地址空间中的地址开始执行,然后虚拟内存管理器把每次内存访问映射到物理位置。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值