Windows可执行文件简述(二)

原创 2004年03月23日 10:00:00

Windows可执行文件简述(二)

 

如果PSP中的第一个FCB含有一个有效驱动器标识符,则置AL00h,否则为0FFhMS-DOS还置AH00h0FFh,这依赖于第二个FCB是否含有一个有效驱动器标识符。

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

建造PSP后,MS-DOSPSP后立即开始(偏移100h)加载com文件,它置SSDSESPSP的段地址,接着创建一个堆栈。为了创建这个堆栈,MS-DOSSP0000h。如果没有分配64K内存,则要置寄存器为比所分配的字节总数大2的值。最后,它把0000h推进栈,这是为了保证与在早期MS-DOS版本上设计的程序的兼容性。

 

MS-DOS通过把控制传递偏移100h处的指令而启动程序。程序设计者必须保证com文件的第一条指令是程序的入口点。

 

注意,因为程序是在偏移100h处加载,因此所有代码和数据偏移也必须相对于100h.汇编语言程序设计者可通过置程序的初值为100h而保证这一点(例如通过在原程序的开始使用语句org 100h)。

 

下面是一个简单的com文件Win32 ASM的例子:

 

MAN STRUCT                           ;定义一个结构

       W  dw 1234h                ;dw 也可用 word

       B  db 9 dup(?)               ;db 也可用 byte

MAN ENDS

 

.model tiny                          ;com格式文件

.data                                   ;对于com格式文件,数据段的内容会自动放到代码段后

zz  MAN <>,<1,"abcd">,<3,"Ldf">

.code                                  ;代码段

.startup                               ;可使下面的指令从0100H 开始(com格式文件要求)

mov ax,3031h

mov zz.W,ax                ;对结构赋值

mov zz.B,'1'

mov ax,type(MAN)       ;取结构所占字节数

.exit                                  ;可设置返回码

end

 

2MZ格式

com发展下去就是MZ格式的可执行文件,这是DOS所能了解的具有重定位功能的可执行文件格式。MZ可执行文件内含16位代码,在这些代码之前加了一个文件头,文件头中包括各种说明数据,如第一句可执行代码执行指令时所需要的文件入口点、堆栈的位置、重定位表等,操作系统根据文件头重的信息将代码部分装入内存,让后根据重定位表修正代码,最后在设置好堆栈后从文件头中指定的入口开始执行。所以DOS可以把程序放在任何它想要的地方。下图是MZ格式的可执行文件的简单结构示意图:

 

MZ标志

MZ文件头

其它信息

重定位表的字节偏移量

重定位表

重定位表

可重定位程序映像

二进制代码

3NE格式

为了保持对DOS的兼容性和保证Windows的需要,在Win 3.x中出现的NE格式的可执行文件中保留了MZ格式的头(具体原因后面会说,这里就不赘述了),同时NE文件又加了一个自己的头,之后才是可执行文件的可执行代码。Win 3.x中的16Windows程序或OS/2程序都有可能是NE格式的。NE类型包括了.exe.dll.drv.fon四种类型的文件。NE格式的关键特性是:它把程序代码、数据、资源隔离在不同的可加载区块中。它也藉由符号输入和输出,实现所谓的执行时期动态链接。16位的NE格式文件装载程序(NE Loader)读取部分磁盘文件,并生成一个完全不同的数据结构,在内存中建立模块。当代码或数据需要装入时,装载程序必须从全局内存中分配出一块,查找原始数据在文件的什么地方,找到位置后再读取原始的数据,最后再进行一些修整。还有,每一个16位的Module要负责记住现在使用的所有段选择符,该选择符表示该段是否已经被抛弃等等。下图是NE格式的可执行文件的结构示意图:

 

MS-DOS

DOS文件头

保留区域

Windows头偏移

DOS Stub程序

信息块

NE文件头

段表

资源表

驻留名表

模块引用表

引入名字表

入口表

非驻留名表

代码段和数据段

程序区

重定位表

其他:Windows可执行文件简述(一)

      Windows可执行文件简述(三)

=======================================================================

rivershan原创于2004年3月23日 3:38

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

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

Windows可执行文件简述(一)

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

Windows可执行文件简述

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

Windows可执行文件简述(三)

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

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

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

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

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

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

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

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

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

解决操作系统无法打开.exe可执行文件的方法

今天一同事电脑出现严重问题,打开我的电脑后弹出一个对话框说“无法找到C:\WINDOWS\system32\rundll32.exe”,然后打开一些已经安装的软件程序却弹出一个让你选择打开方式的对话框...
  • yusiyuuestc
  • yusiyuuestc
  • 2014年02月21日 16:53
  • 2869

windows 可执行文件 二进制程序机制

本文来自CSDN博客:http://blog.csdn.net/benny5609/archive/2008/06/09/2527838.aspx 操作系统中的文件是一种抽象的机制,提供了一种在磁盘上...
  • buptisc_txy
  • buptisc_txy
  • 2010年05月05日 21:26
  • 1450
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows可执行文件简述(二)
举报原因:
原因补充:

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