2008年4月23日星期三

几种文件区别

安装程序的可执行程序msi与setup.exe:

msi是Windows installer开发出来的程序安装文件,可以安装、修改、卸载所安装的程序。msi就是Windows installer的数据包,把所有和安装文件相关的内容封装在一个包里了。
setup.exe也允许你安装程序,但程序员在开发setup.exe的时候要比开发setup.msi困难的多,需要人工编写和安装,修改,卸载相关的很多内容。而msi把这些功能都集成化了,易于开发Windows程序安装包。


bin与exe:

在windows下,bin文件一般理解为纯粹的可执行代码和全局数据。
可执行文件则是在bin文件的基础上加上了和操作系统加载应用所需要的相关信息,并按照规定文件格式存储。


com与exe:

A .COM file is a direct image of how the program will look in main memory(COM文件是最早的也是结构最简单的可执行文件,COM文件中仅仅包括可执行代码,没有附带任何“支持性”的数据), and a .EXE file will undergo some further relocation when it is run (and so it begins with a relocation header). A .COM file is limited to 64K for all segments combined, but a .EXE file can have as many segments as your linker will handle and be as large as RAM can take.

The actual file extension doesn't matter. DOS knows that a file being loaded is in .EXE format if its first two bytes are MZ or ZM; otherwise it is assumed to be in .COM format. For instance, DR-DOS 6.0's COMMAND.COM is in .EXE format as is COMMAND.COM in recent versions of MS-DOS.

Any .COM file can be converted to an .EXE file by adding an appropriate header to it.

The entry point of the .COM file is _always_ 0x100(没有附加数据来指定文件入口,这样,第一句执行指令必须安排在文件头部), while the entry point of the .EXE file can be at any address.

COM没有重定位信息,这样代码中不能有跨段操作数据的指令,造成代码和数据,甚至包括堆栈只能限制在同一个64 KB的段中。

The stack size of the .COM file is the remainder of those 64K which isn't used by the code image, while the stack size of the single segment .EXE file can be set at any size as long as it fits within those 64K. Thus the stack can be smallere in the .EXE file.

When a COM file is loaded, the entire TPA (= "free memory") of MS-DOS is allocated for that COM file -- including those parts of the TPA which are outside the 64k of the COM file. If you don't want this (e.g. because your COM file is a TSR and you want to load other programs later), you must explicitly free those parts of the TPA you want freed. In the header of an .EXE file you can specify how large part of the TPA that .EXE file should receive.


DOS下exe和Windows下exe:

可执行文件的格式是操作系统工作方式的写照,因为可执行文件头部的数据是供操作系统装载文件用的,不同操作系统的运行方式各不相同,所以造成可执行文件的格式各不相同。

DOS下exe:DOS下的EXE文件相比于COM文件,它在代码的前面加了一个文件头,文件头中包括各种说明数据,如文件入口、堆栈的位置、重定位表等,操作系统根据文件头中的信息将代码部分装入内存,根据重定位表修正代码,最后在设置好堆栈后从文件头中指定的入口开始执行。 DOS下EXE文件可以在DOS和WINDOWS中运行。它通过在文件头添加ASCII字符串“MZ”(16进制中表示为4D5A)来标识。“MZ”是MS-DOS开发者之一的Mark Zbikowski的姓名首字母缩写。

windows下exe:带PE头,通过在文件头添加ASCII字符串“PE”来标识。它主要运行于Windows 95和Windows NT以及更高版本的Windows中,也可在BeOS R3中运行。在PE文件中,代码、已初始化的数据、资源和重定位信息等数据被按照属性分类放到不同的节(Section)中,而每个节的属性和位置等信息用一个IMAGE_SECTION_HEADER结构来描述,所有的IMAGE_SECTION_HEADER结构组成一个节表(Section Table),节表数据在PE文件中被放在所有节数据的前面。我们知道,Win32中可以对每个内存页分别指定可执行、可读写等属性,PE文件将同样属性的数据分类放在一起是为了统一描述这些数据装入内存后的页面属性。关于PE格式在其他文章详述。


Flash的exe和swf格式:

exe是windows下课执行文件,能在windows平台上播放。
swf只能在安装了flash播放器的机器上播放。swf文件可以被轻易地看到源文件和资源文件。

标签:


评论: 发表评论

订阅 博文评论 [Atom]





<< 主页

This page is powered by Blogger. Isn't yours?

订阅 博文 [Atom]