可执行文件:修订间差异

来自站长百科
跳转至: 导航、​ 搜索
无编辑摘要
无编辑摘要
第1行: 第1行:
[[Image:exe.jpg|right|260px|thumb|.exe文件]]
[[Image:exe.jpg|right|260px|thumb|.exe文件]]
== 名词解释 ==
'''可执行文件'''  一方面来说,EXE File(可执行[[程序]]),一种可在[[操作系统]][[存储空间]]中浮动定位的可执行程序。MS-DOS和MS-[[WINDOWS]]下,此类文件扩展名为.exe 2.WINDOWS操作系统中的[[二进制]]可执行文件,可执行文件分两种一种是后辍名为.COM另一种就是.EXE 。从另一方面来说,可执行文件 (executable file) ,可移植可执行 (PE) 文件格式的文件,它可以加载到[[内存]]中,并由操作系统加载[[程序]]执行。它可以是 .exe文件 .sys文件 .com文件 .bat文件等。<br/>
一方面来说,EXE File(可执行[[程序]]),一种可在[[操作系统]][[存储空间]]中浮动定位的可执行程序。MS-DOS和MS-[[WINDOWS]]下,此类文件扩展名为.exe 2.WINDOWS操作系统中的[[二进制]]可执行文件,可执行文件分两种一种是后辍名为.COM另一种就是.EXE 。从另一方面来说,可执行文件 (executable file) ,可移植可执行 (PE) 文件格式的文件,它可以加载到[[内存]]中,并由操作系统加载[[程序]]执行。它可以是 .exe文件 .sys文件 .com文件 .bat文件等。<br/>
如[[Windows]][[资源管理器]]的[[进程]]:explorer.exe,这类程序通常用来处理或打开处理其它文件。比如:myfile.txt双击打开由windows的explorer.exe程序来进行编辑。
如[[Windows]][[资源管理器]]的[[进程]]:explorer.exe,这类程序通常用来处理或打开处理其它文件。比如:myfile.txt双击打开由windows的explorer.exe程序来进行编辑。
我们做一件事,可以把顺序以及具体做什么事写在mybat.bat文件中,那运行它就可以把要做的事件执行了。也可以理解为:这类文件可以“单独运行”,或者理解为“有生命”的文件!
我们做一件事,可以把顺序以及具体做什么事写在mybat.bat文件中,那运行它就可以把要做的事件执行了。也可以理解为:这类文件可以“单独运行”,或者理解为“有生命”的文件!
== 发展过程 ==
== 发展过程 ==
*在DOS下,生成一个可执行文件的步骤比较简单,用[[编译器]]将源程序编译为obj文件,再用链接器将obj文件[[链接]]成exe文件,不同语言的开发过程都差不多。<br/>
*在DOS下,生成一个可执行文件的步骤比较简单,用[[编译器]]将源程序编译为obj文件,再用链接器将obj文件[[链接]]成exe文件,不同语言的开发过程都差不多。[[DOS]]可执行文件中的内容是由[[源程序]]中所写的[[代码]]和数据定义转换而来的。惟一的例外是带覆盖部分(Overlay)的exe文件,它在基本的exe文件后附加了一些自定义的数据,其中可执行部分的长度由文件头偏移0002h和0004h中的长度给出,该长度之后到文件实际长度这部分就是Overlay部分。
[[DOS]]可执行文件中的内容是由[[源程序]]中所写的[[代码]]和数据定义转换而来的。惟一的例外是带覆盖部分(Overlay)的exe文件,它在基本的exe文件后附加了一些自定义的数据,其中可执行部分的长度由文件头偏移0002h和0004h中的长度给出,该长度之后到文件实际长度这部分就是Overlay部分。这样,即使一个带覆盖的exe文件大小远远超过640 KB,在DOS下也能运行,因为操作系统只装入真正的可执行部分,然后由程序自己去读取覆盖部分的数据。一些打包[[软件]]生成的奇大无比的自解压包就采用这种结构,可执行部分是解包代码,覆盖部分是被压缩的数据。DOS对可执行文件覆盖部分的数据格式并没有规定,它是[[程序员]]按自己的方式组织的。如果程序员愿意,也可以把这些数据单独放在另外一个文件中。
*[[Win32]]可执行文件叫做PE文件。PE文件的基本结构和DOS可执行文件有很大的不同。它把程序中的不同部分分成各种节区(Section),其中可以有一个节区是放置各种资源的。所以与DOS软件的开发过程相比,Win32软件的开发中多了一个创建资源文件的步骤。
*[[Win32]]可执行文件叫做PE文件。PE文件的基本结构和DOS可执行文件有很大的不同。它把程序中的不同部分分成各种节区(Section),其中可以有一个节区是放置各种资源的,如菜单、对话框、位图、光标、图标和声音等。虽然可以把资源部分理解成类似DOS可执行文件中的“覆盖”部分,但由于资源是Win32可执行文件的标准组成部分,而且是非常重要的组成部分,它的格式是固定的。所以与DOS软件的开发过程相比,Win32软件的开发中多了一个创建资源文件的步骤。<br/>
*程序员用文本编辑器书写汇编源代码(*.asm文件)。与[[C]]源代码类似,asm文件中也可以用include语句包含数据定义和[[函数]]声明的头文件,Win32汇编的头文件一般用inc作[[扩展名]]。大部分的include文件是编译器软件包附带提供的。
以使用MASM32软件包为例,在用Win32汇编开发软件的流程中,程序员要做的工作分创建代码和创建资源两部分,如图2.1所示。<br/>
*在资源文件中,不同类型资源的记录方式是不同的。对话框资源只记录定义值,如对话框的大小、位置等,并非真正存储对话框最后显示在屏幕上的[[像素]]。这些大小、位置等信息最后由Windows解释后才在屏幕上被绘画成像素。
代码部分的开发工作与DOS下写代码的步骤是一样的。程序员用文本编辑器书写汇编源代码(*.asm文件)。与[[C]]源代码类似,asm文件中也可以用include语句包含数据定义和[[函数]]声明的头文件,Win32汇编的头文件一般用inc作[[扩展名]]。大部分的include文件是编译器软件包附带提供的,如MASM32软件包附带的Windows.inc文件定义了Win32 [[API]]中很多参数和[[数据结构]],其他的inc文件则是不同DLL中的Win32 API函数声明。最后,asm文件经汇编编译器编译成以obj为[[扩展名]]的目标文件。资源文件中可以包括对话框、快捷键、菜单、字符串、版本信息和一些图形资源等内容。资源文件的源文件是一种类似“[[脚本]]”的文本文件,它的扩展名一般为rc,其中用不同的语法定义了不同类型的资源,资源脚本文件最后由资源编译器编译成资源文件*.res。资源脚本文件同样用到很多预定义值,所以软件包中一般也包括资源头文件供源文件来导入。MASM32软件包中的资源头文件是Resource.h。<br/>
*编译好目标文件*.obj和资源文件*.res后,最后一步是用链接器将它们链接成可执行文件。[[链接]]的时候要用到函数库。在DOS环境下[[编程]]的时候,使用的函数库是静态库。静态库是一些已经编译好的代码模块。当用户在源程序中用到某个函数的时候,链接器从库文件中将这个函数的[[二进制]]代码取出,与obj文件合在一起生成最终的exe文件。但在Win32环境下,大部分的公用函数[[封装]]在[[DLL]]文件中,以[[动态链接]]的方式供用户程序调用。这时候库文件中只需要包含函数在DLL中的位置信息,不再需要有[[二进制代码]]部分。所以链接的时候也只是把库文件中的位置信息取出放入最后的可执行文件中。Win32中这种只包含位置信息的库文件称为导入库。
在资源文件中,不同类型资源的记录方式是不同的。对话框资源只记录定义值,如对话框的大小、位置等,并非真正存储对话框最后显示在屏幕上的[[像素]]。这些大小、位置等信息最后由Windows解释后才在屏幕上被绘画成像素;菜单、[[字符串]]、[[快捷键]]等由文本构成;图形资源则真正由像素组成,它们在资源脚本中被定义为一个文件名,由资源编译器从磁盘文件导入。Windows在资源中支持的图形文件有bmp位图文件、cur光标文件和ico图标文件,这些图形文件可以用其他图形处理软件生成。另外,wav声音文件也可以用在资源中。创建资源的方法在第5章中有详细的描述。<br/>
编译好目标文件*.obj和资源文件*.res后,最后一步是用链接器将它们链接成可执行文件。[[链接]]的时候要用到函数库。在DOS环境下[[编程]]的时候,使用的函数库是静态库。静态库是一些已经编译好的代码模块。当用户在源程序中用到某个函数的时候,链接器从库文件中将这个函数的[[二进制]]代码取出,与obj文件合在一起生成最终的exe文件。但在Win32环境下,大部分的公用函数[[封装]]在[[DLL]]文件中,以[[动态链接]]的方式供用户程序调用。这时候库文件中只需要包含函数在DLL中的位置信息,不再需要有[[二进制代码]]部分。所以链接的时候也只是把库文件中的位置信息取出放入最后的可执行文件中。Win32中这种只包含位置信息的库文件称为导入库。
== 格式分类 ==
== 格式分类 ==
*'''DOS可执行文件'''
*'''DOS可执行文件'''
第32行: 第29行:
*[[操作系统]]
*[[操作系统]]
*[[进程]]
*[[进程]]
== 参考资料 ==
== 参考来源 ==


*[http://www.hudong.com/wiki/%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6 参考资料1]
*[http://www.hudong.com/wiki/%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6 参考资料1]

2011年3月30日 (三) 16:07的版本

.exe文件

可执行文件 一方面来说,EXE File(可执行程序),一种可在操作系统存储空间中浮动定位的可执行程序。MS-DOS和MS-WINDOWS下,此类文件扩展名为.exe 2.WINDOWS操作系统中的二进制可执行文件,可执行文件分两种一种是后辍名为.COM另一种就是.EXE 。从另一方面来说,可执行文件 (executable file) ,可移植可执行 (PE) 文件格式的文件,它可以加载到内存中,并由操作系统加载程序执行。它可以是 .exe文件 .sys文件 .com文件 .bat文件等。
Windows资源管理器进程:explorer.exe,这类程序通常用来处理或打开处理其它文件。比如:myfile.txt双击打开由windows的explorer.exe程序来进行编辑。 我们做一件事,可以把顺序以及具体做什么事写在mybat.bat文件中,那运行它就可以把要做的事件执行了。也可以理解为:这类文件可以“单独运行”,或者理解为“有生命”的文件!

发展过程

  • 在DOS下,生成一个可执行文件的步骤比较简单,用编译器将源程序编译为obj文件,再用链接器将obj文件链接成exe文件,不同语言的开发过程都差不多。DOS可执行文件中的内容是由源程序中所写的代码和数据定义转换而来的。惟一的例外是带覆盖部分(Overlay)的exe文件,它在基本的exe文件后附加了一些自定义的数据,其中可执行部分的长度由文件头偏移0002h和0004h中的长度给出,该长度之后到文件实际长度这部分就是Overlay部分。
  • Win32可执行文件叫做PE文件。PE文件的基本结构和DOS可执行文件有很大的不同。它把程序中的不同部分分成各种节区(Section),其中可以有一个节区是放置各种资源的。所以与DOS软件的开发过程相比,Win32软件的开发中多了一个创建资源文件的步骤。
  • 程序员用文本编辑器书写汇编源代码(*.asm文件)。与C源代码类似,asm文件中也可以用include语句包含数据定义和函数声明的头文件,Win32汇编的头文件一般用inc作扩展名。大部分的include文件是编译器软件包附带提供的。
  • 在资源文件中,不同类型资源的记录方式是不同的。对话框资源只记录定义值,如对话框的大小、位置等,并非真正存储对话框最后显示在屏幕上的像素。这些大小、位置等信息最后由Windows解释后才在屏幕上被绘画成像素。
  • 编译好目标文件*.obj和资源文件*.res后,最后一步是用链接器将它们链接成可执行文件。链接的时候要用到函数库。在DOS环境下编程的时候,使用的函数库是静态库。静态库是一些已经编译好的代码模块。当用户在源程序中用到某个函数的时候,链接器从库文件中将这个函数的二进制代码取出,与obj文件合在一起生成最终的exe文件。但在Win32环境下,大部分的公用函数封装DLL文件中,以动态链接的方式供用户程序调用。这时候库文件中只需要包含函数在DLL中的位置信息,不再需要有二进制代码部分。所以链接的时候也只是把库文件中的位置信息取出放入最后的可执行文件中。Win32中这种只包含位置信息的库文件称为导入库。

格式分类

  • DOS可执行文件

最简单的可执行文件格式,可以在DOS和WINDOWS中运行。它通过在文件头添加ASCII字符串“MZ”(16进制中表示为4D5A)来标识。“MZ”是MS-DOS开发者之一的马克·茨柏克沃斯基(Mark Zbikowski)的姓名首字母缩写。

  • 16位元新可执行文件

通过在文件头添加ASCII字符串“NE”来标识。它只能运行在Windows和OS/2系统,而不能在DOS下运行。

  • 16/32位元混合式线性可执行文件

通过在文件头添加ASCII字符串“LE”来标识。它仅用来在Windows 3.x和Windows 9x中替代VxD驱动

  • 32位元线性可执行文件

通过在文件头添加ASCII字符串“LX”来标识。运行在OS/2 2.0以及更高版本中,也可用于某些DOS扩展。

  • 32位元可执行文件

这是最复杂也是目前最流行的可执行文件格式,通过在文件头添加ASCII字符串“PE”来标识。它主要运行于Windows 95和Windows NT以及更高版本的Windows中,也可在BeOS R3中运行。

  • 64位元可执行文件

与前一种类似,但使用支持64位元的中央处理器。因此它仅能在64位元的Windows系统中运行,譬如Windows XP 64-Bit Edition 和 Windows Server 2003 64-Bit Edition。引引引

防病毒机制

计算机病毒中绝大部分是文件型。所谓文件型病毒是指此类病毒寄生在可执行文件上,并依靠可执行文件来传播。从数学角度而言,解除这种病毒的过程实际上是病毒感染过程的逆过程。通过检测工作、(跳转、解码),已经得到了病毒体的全部代码,用于还原病毒的数据肯定在病毒体内,只要找到这些数据,依照一定的程式或方法即可将文件恢复,也就是说可以将病毒解除。

相关条目

参考来源