Windows可执行文件简述(一)

原创 2007年09月17日 12:36:00
Windows可执行文件简述(一)
 
操作系统中的文件是一种抽象的机制,提供了一种在磁盘上保存信息而且方便以后读取的方法。在Windows操作系统中,一个用户可以最直接体会到的文件的形式就是以.exe、.dll等为扩展名的可执行文件。伴随着Windows操作系统的不断进步,其可执行文件的格式也发生了巨大变化。这期间主要有4个过程:DOS中出现的最简单的以.com为扩展名的可执行文件和以.exe为扩展名的MZ格式(MZ是MZ格式的主要作者Mark Zbikowski的名字的缩写)的可执行文件,Win 3.x下出现的NE(New Executable:分段可执行文件)格式的.exe和.dll文件,Win 3.x和Win9x所专有的LE(Linear Executable:线性可执行文件,专用于VxD文件),Win9x和Win NT/2000/XP下的32位的可执行文件PE(Portable Executable:可移动的可执行文件)。这里面com、MZ和NE属于Win16,PE属于Win32,LE可以兼容Win16和Win32。
 
       在一个操作系统中,可执行的代码最终被装入内存执行之前是以文件的方式存放在磁盘中的,也就是以可执行文件的方式。下面是Microsoft Windows操作系统中的可执行文件的概述。
1.com格式
Windows下最简单的可执行文件就是DOS下的以.com为扩展名的com文件。com文件是旧有的只有64kb内存的cp/m机器的产物。com格式文件最大64K,com文件内含16位程序的二进制代码映像,没有重定位信息。
 
com文件包含程序的二进制代码的一个绝对映像。也就是说,为了运行程序准确的处理器指令和内存中的数据,MS-DOS通过直接把该映像从文件拷贝到内存而加载com程序;它不作任何改变。
 
为加载一个com程序,MS-DOS首先试图分配内存,因为com程序必须位于一个64K的段中,所以com文件的大小不能超过65,024(64K减去用于PSP的256字节和用于一个起始堆栈的至少256字节)。如果MS-DOS不能为程序、一个PSP、一个起始堆栈分配足够内存,则分配尝试失败。否则,MS-DOS分配尽可能多的内存(直至所有保留内存)。即使com程序本身不能大于64K。在试图运行另一个程序或分配另外的内存之前,大部分com程序释放任何不需要的内存。
 
分配内存后,MS-DOS在该内存的头256字节建立一个PSP(Program Segment Prefix,程序段前缀),PSP结构如下:
 
偏移
大小(Byte)
说 明
0000h
02
中断20H
0002h
02
以节计算的内存大小(利用这个可看出是否感染引导型病毒)
0004h
01
保留
0005h
05
至DOS的长调用
000Ah
02
INT 22H 入口 IP
000Ch
02
INT 22H 入口 CS
000Eh
02
INT 23H 入口 IP
0010h
02
INT 23H 入口 CS
0012h
02
INT 24H 入口 IP
0014h
02
INT 24H 入口 CS
0016h
02
父进程的PSP段值(可测知是否被跟踪)
0018h
14
存放20个SOFT号
002Ch
02
环境块段地址(从中可获知执行的程序名)
002Eh
04
存放用户栈地址指针
0032h
1E
保留
0050h
03
DOS调用(INT 21H / RETF)
0053h
02
保留
0055h
07
扩展的FCB头
005Ch
10
格式化的FCB1
006Ch
10
格式化的FCB2
007Ch
04
保留
0080h
80
命令行参数长度
0081h
127
命令行参数
 

Windows可执行文件简述(一)

Windows可执行文件简述(一) 操作系统中的文件是一种抽象的机制,提供了一种在磁盘上保存信息而且方便以后读取的方法。在Windows操作系统中,一个用户可以最直接体会到的文件的形式就是以.exe、...
  • rivershan
  • rivershan
  • 2004年03月23日 09:58
  • 2552

【逆向】Windows可执行文件简述(一)

操作系统中的文件是一种抽象的机制,提供了一种在磁盘上保存信息而且方便以后读取的方法。在Windows操作系统中,一个用户可以最直接体会到的文件的形式就是以.exe、.dll等为扩展名的可执行文件。伴随...
  • baidu_39511645
  • baidu_39511645
  • 2017年10月30日 09:34
  • 55

Windows可执行文件简述

操作系统中的文件是一种抽象的机制,提供了一种在磁盘上保存信息而且方便以后读取的方法。在Windows操作系统中,一个用户可以最直接体会到的文件的形式就是以.exe、.dll等为扩展名的可执行文件。伴随...
  • benny5609
  • benny5609
  • 2008年06月09日 18:58
  • 2936

Windows可执行文件简述(二)

Windows可执行文件简述(二) 如果PSP中的第一个FCB含有一个有效驱动器标识符,则置AL为00h,否则为0FFh。MS-DOS还置AH为00h或0FFh,这依赖于第二个FCB是否含有一个有效驱...
  • rivershan
  • rivershan
  • 2004年03月23日 10:00
  • 2866

Windows可执行文件简述(三)

Windows可执行文件简述(三)4.LE格式在Windows3.x的时代,从DOS启动Windows,Windows在把机器转到保护模式之前需要在实模式下做一些初始化。实模式的16位代码必须和32位...
  • rivershan
  • rivershan
  • 2004年03月23日 10:00
  • 2802

【逆向】Windows可执行文件简述(二)

如果PSP中的第一个FCB含有一个有效驱动器标识符,则置AL为00h,否则为0FFh。MS-DOS还置AH为00h或0FFh,这依赖于第二个FCB是否含有一个有效驱动器标识符。   建造PSP...
  • baidu_39511645
  • baidu_39511645
  • 2017年10月30日 09:36
  • 36

【逆向】Windows可执行文件简述(三)

4.LE格式 在Windows3.x的时代,从DOS启动Windows,Windows在把机器转到保护模式之前需要在实模式下做一些初始化。实模式的16位代码必须和32位代码一起放在可执行文件中。旧的...
  • baidu_39511645
  • baidu_39511645
  • 2017年10月30日 09:38
  • 32

用命令行执行可执行文件笔记

鉴于很多书上贴的源代码含有
  • zhaogang1993
  • zhaogang1993
  • 2014年11月13日 09:09
  • 674

将Python程序打包为Windows可执行文件格式

花一天时间随便找了几篇文章入门Python,并且写了几个Python小程序想和朋友分享一下顺便推荐这个很棒的编程语言,但是遗憾的是朋友的电脑没有安装Python,而且还是用Windows系统,所以最好...
  • CherylNatsu
  • CherylNatsu
  • 2011年02月25日 19:44
  • 4441

java 面向对象 OO 反射 "六原则一法则"

1.获得一个类的类对象有哪些方式? 答: - 方法1:类型.class,例如:String.class - 方法2:对象.getClass(),例如:”hello”.getClass() ...
  • u010575093
  • u010575093
  • 2016年02月28日 12:57
  • 822
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows可执行文件简述(一)
举报原因:
原因补充:

(最多只允许输入30个字)