首页
社区
课程
招聘
[原创]浅谈可执行文件的后辍名
发表于: 2008-12-22 08:41 3513

[原创]浅谈可执行文件的后辍名

2008-12-22 08:41
3513
标 题: 【原创】浅谈可执行文件的后辍名
作 者: qydao
时 间: 2008-12-22

    一、入门篇——可执行文件的后辍名是exe或com

      在windows操作系统中,为了区别各种不同类型的文件,系统采用文件扩展名(或者叫文件后辍名)的形式来描述文件格式。通常来说,一个扩展名是跟在文件名后面的,由一个分隔符分隔(winodws下是一个点号)。在一个像“readme.txt”的文件名中,readme是文件名,txt为扩展名,表示这个文件是一个纯文本文件。我们经常接触的扩展名有doc(Word文档)、wps(Wps文档)、xls(Excel电子表格)、ppt(Powerpoint演示文稿)、jpg(图片)、txt(纯文本)、rar(Winrar压缩文件)、htm(网页文件)、html(网页文件)等等。注系统不区分扩展名的大小写。系统默认是不显示文件后辍名的,可以依次打开:我的电脑——工具——文件夹选项——查看——找到“隐藏已知文件类型的扩展名”这一选项,去掉前面的钩——确定即可显示文件扩展名。

     PE文件就是可移植的执行体是Portable Execute的全称,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL),只有exe和com是直接执行的。pe文件与其它文件和最大区别是有一个合法的pe头,使windows能够理解并执行它,而txt、doc、ppt、rar等文件在双击时实际上是调用了对应的编辑程序如记事本、word、幻灯片编程程序、winrar等,执行的是后者,而不是前者,后者是pe文件,前者只是后者被执行后打开了前者。txt实际是上保存了记事本的数据,doc只是保存了word的数据......。

    因此,只有后辍名为exe或com的文件才能真正独立运行,即使你把记事本文件的txt或word文档的doc修改成exe,你双击启动时系统也不会去运行了,会弹出“XX不是有效的win32应用程序”之类的对话框,意思是该文件不是pe类型的可执行文件,不能在windows32位操作系统下运行。因此在windows下只有exe或com才是可以独立执行的可执行文件。

    二、初级篇——可执行文件的后辍名还可以是pif、scr、bat等

    可执行文件和后辍名通常是exe和com,但只有这两个文件是可执行文件吗,回答是否定的,如果你试着把一个pe格式的文件扩展名改成其它类型的后辍,它还可以被双击执行吗?例如你试着把exe改成txt、doc、ppt、rar等,你会发现双击之后调用了关联文件也就是记事本、word、PowerPoint和winrar,并且它们都不能被正确打开,其原因是此文件是pe格式,不符合记事本、word、PowerPoint和winrar等所预定的格式。然而我们不应该到此就住手,我们继续实验其它类型的后辍名,经过测试,实际上把exe改成pif、scr、bat等后,该文件被双击后仍然能被正确执行,能达到预期结果。因此可执行文件的后辍名可能有:
exe 本身就是可执行文件标准后辍
com 是可执行文件标准后辍
pif dos格式的快捷方式后辍
scr 屏幕保护程序后辍
bat 批处理文件

    不要说pif、scr和bat明明不是可执行文件吗,它们为什么也被当成exe被打开了呢?总的来说可执行文件的后辍名除了是exe或com外,还可以是pif、scr、bat等。

    三、高级篇——可执行文件可以是任意后辍名

    如果你看完上面觉得收获不少的话,请继续看下面:
不知道你是不是注意到有时打开任务管理器会发现里面有陌生进程,如*.tmp等,它们是可执行文件吗?如果不是可执行文件那么进程管理中为什么会出现?惊奇之余试着把EXE文件后辍改成tmp,双击一下,失败了,不能正打开。你不必懊悔,前面其实就已经讲过,只有特定的几个后辍才可以。也许到此你要退缩了.....

    其实任务管理器进程中的*.tmp是可执行文件,但不是双击被执行的,而是用dos命令来运行的,XP下的dos就是cmd.exe,为了清楚的让你明白,我们来做个试验。
    第一步:找一个常见的exe文件,把它复制到D盘根目录下,并把它改成123.tmp,注意后辍后变成了tmp;
     第二步:单击开始——程序——附件——命令提示符,打开xp下的dos模式;
    第三步:在命令行窗口中依次输入
d:[回车]
123.tmp[回车]

    此时你会发现123.tmp被当成EXE正确运行了,为什么呢?我们带着问题查阅了相关资料,发现当您使用命令提示(Cmd.exe 或 Windows 命令处理器)打开没有可执行文件扩展名的文件时,该文件可能作为程序运行,而不是在为该文件类型注册(根据文件扩展名)的程序中打开。例如,如果在命令提示符下键入 filename 或 filename.txt,则 Filename.txt 可能作为程序运行,而不是在记事本中打开。如果在批处理 (.bat) 文件或 Windows NT 命令脚本 (.cmd) 文件中以命令行形式调用文件,则也可能出现此问题。这实际上是微软从命令行操作系统向窗口操作系统过渡时的一个兼容,在命令提示符下键入文件名时,或者将文件名用作批处理文件或 Windows NT 命令脚本中的命令行时,Cmd.exe 会先调用 CreateProcess 函数以打开文件。CreateProcess 函数会该文件的内容,并且优先按PE格式去判断它,如果文件包含pe头(表示该文件实际上是 .com 或 .exe 文件),则该文件作为程序运行。因此当你在cmd中打开任意文件时,cmd会优先当成exe或com会处理,所以在cmd中只要是可执行文件,文件内容符合PE格式,不管是什么后辍都可以得到正确运行。因此可执行文件的关键在于文件内容,可以是任意合法的后辍名。

    本文参考了百度知道相关内容,并参阅了微软部分文档,如果你对本文感兴趣转载时不要修改本文档内容,并注明作者和文章出处。如果本文档有什么疏漏之处或不足请留言,或给我来信,本人十分感谢。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
2
挺有意思的一片文章....
实际上windows的机制决定了,文件的解释类型和他的后缀有关。可能会加快执行的速度。linux下只和文件头有关....。没有研究过,不知到哪种系统方式更好....
2008-12-22 08:59
0
雪    币: 462
活跃值: (53)
能力值: ( LV9,RANK:460 )
在线值:
发帖
回帖
粉丝
3
2008-12-22 10:56
0
游客
登录 | 注册 方可回帖
返回
//