首页 理论教育 微型计算机原理-MS-DOS下EXE执行文件加载与执行过程

微型计算机原理-MS-DOS下EXE执行文件加载与执行过程

时间:2023-11-03 理论教育 版权反馈
【摘要】:以下我们以MS-DOS操作系统下EXE执行文件的加载与执行过程为例来说明这个过程。MS-DOS的EXE格式可执行文件由一个文件头和一个可重定位映像两部分组成,文件头包含MS-DOS用于加载程序的信息,例如程序的大小和寄存器的初始值。表3-1 PSP的结构内存分配完成之后,MS-DOS从外存上装载可执行程序映像到已分配的内存区域,留出256字节用于构建PSP,并对映像中的可重定位段地址进行重定位。

微型计算机原理-MS-DOS下EXE执行文件加载与执行过程

微型计算机系统中,程序的执行通常要靠操作系统来加载,并在执行过程中使用操作系统提供的各种系统功能,接受操作系统的调度与控制。在不同的操作系统中,可执行程序的结构是不同的,其加载和执行过程也相应地有所差别,但总的过程基本上是一致的。以下我们以MS-DOS操作系统下EXE执行文件的加载与执行过程为例来说明这个过程。

MS-DOS操作系统定义了两种可执行程序格式,分别是比较简单的COM格式和比较复杂的EXE格式。其中COM格式以.com为扩展名,被限定为只能拥有一个段,这样COM格式的程序的长度被限定在64 KB以下。而且COM格式不能被重定位,其入口点只能是100H偏移处。COM格式的这些限制使得COM格式的可执行文件(或者按照MS-DOS的命名为命令文件——Command File)只能用于承载一些小规模的简单应用。而以.exe为扩展名的EXE格式可执行文件(Executable File)则占据MS-DOS操作系统中可执行文件的大多数。

MS-DOS的EXE格式可执行文件由一个文件头和一个可重定位映像两部分组成,文件头包含MS-DOS用于加载程序的信息,例如程序的大小和寄存器的初始值。文件头还指向一个重定位表,该表包含指向程序映像中可重定位段地址指针链表。文件头的形式与EXEHEADER结构对应。

978-7-111-46342-9-Chapter03-9.jpg

978-7-111-46342-9-Chapter03-10.jpg

紧接在文件头之后的是程序映像,包含处理器代码和程序的初始数据,MS-DOS通过把该映像直接从文件复制到内存加载EXE程序。(www.xing528.com)

在MS-DOS加载EXE程序时它首先申请一块足够大的内存,这块内存除了用来装载EXE文件中的程序映像,和根据文件头EXEHEADER结构中的exMinAlloc和exMaxAlloc来分配程序执行时所需要的附加内存空间之外,还要为一个叫做程序段前缀(Program segment prefix,PSP)的结构提供存储空间。PSP是DOS在加载外部命令或应用程序时,在加载的程序段前面设置的一个256字节长度的信息区,这段信息区的格式如表3-1所示。

3-1 PSP的结构

978-7-111-46342-9-Chapter03-11.jpg

内存分配完成之后,MS-DOS从外存上装载可执行程序映像到已分配的内存区域,留出256字节用于构建PSP,并对映像中的可重定位段地址进行重定位。最后,MS-DOS构建PSP,使用文件头中的值设置SP与SS,把ES和DS设置为PSP的段地址,从程序文件头读取CS和IP的初始值,把起始段地址加到CS之上并把控制转移到位于调整后地址处的程序,完成EXE程序的加载过程。

对于其他的操作系统,其可执行文件的格式与MS-DOS有所不同,加载过程也有所不同。例如32位的Windows操作系统(如Windows XP)采用了一种被称作Portable Executable的文件格式存储其可执行文件,这个格式也以.exe为扩展名,并与前述MS-DOS的EXE文件格式相兼容。但是在加载的过程中,由于32位的Windows已经是多用户多任务的操作系统,而且采用了与MS-DOS不同的内存管理方法,可执行文件的加载过程相应地要复杂得多,需要经过创建进程、分配空间、初始化运行环境、加载代码、创建线程、调用启动函数等一系列动作,才能完成程序的加载。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈