首页
社区
课程
招聘
[旧帖] [求助]exe与com有什么不同 0.00雪花
发表于: 2011-4-27 00:36 3353

[旧帖] [求助]exe与com有什么不同 0.00雪花

2011-4-27 00:36
3353
请问,exe与com有什么不同啊!为什么有的文件扩展名是exe无法执行,变成com就可以执行了哪?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 220
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
系统的问题吧,windows平台和mac平台
2011-4-27 01:47
0
雪    币: 18
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
为什么有的文件扩展名是exe无法执行,变成com就可以执行了哪
2011-4-27 05:57
0
雪    币: 416
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
基本上在標準上,com檔事dos時代的產物了,.exe檔案好像是後來才出現的
2011-4-27 08:04
0
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
COM是DOS时代的可执行文件,特点如下:
    1.程序只能设置一个段,且不建立堆栈段;
    2.程序的长度必须少于64K字节;
    3.程序必须预留100H空间,开始处是一条可执行指令;
    4.程序被装入的起始标号必须由END语句说明开始地址;
    5.程序中的子程序必须具有近程属性(NEAR);
    6.如果COM文件是由几个不同的目标模块链接生成的,要求所有目标模块具有同一代码段名和类别名(CLASS),且赋予公共属性(PUBLIC),而主模块应具有100H的入口指针并优先连接。

    EXE:
    1.程序允许建立若干不同名的代码段、数据段、堆栈段或附加段。
    2.程序的长度仅受当前内存可用空间的限制。
    3.程序的入口随应用而定,只需起始标号与END语句说明的起始地址一致。
    4.程序中的各个子程序的属性随段内或段间调用而定为NEAR或FAR。
    5.连接生成EXE文件的各个不同的目标模块内的代码段,数据段或附加段可取同名或独立命名。但要求只有主模块的END语句指出程序入口的起始标号,并至少有一个具有STACK属性的堆栈段。
2011-4-27 09:36
0
雪    币: 364
活跃值: (91)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
exe分为PE结构的 和DOS版的。DOS下:com不能超过64KB,EXE可以超过64KB。为什么有些EXE不能执行改成com就可以了可能与入口有关。COM文件的入口必须是100H。
2011-4-27 09:48
0
雪    币: 253
活跃值: (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
11 楼是正解!
2011-4-27 17:44
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
主要的区别只有一个:com程序没有头部控制信息,只有二进制代码;EXE程序会有一个头部控制信息,控制EXE的二进制代码。
这个主要区别就决定了他们之间会有许多的差别:
1:COM程序的入口地址是固定的,为100h;exe程序的人口地址可以随意,由end 后面的标号决定。
2:COM程序的数据和代码段是混合在一起的,因为COM没有能力识别数据段开始的位置。
3:COM程序只能有一个代码段,而不能有更多,这也决定了COM程序的大小最多为64K。
从本质上来看,COM和EXE保存的都是机器代码。因此,我们在某些情况下,把EXE程序的头部去了,并做适当的修改,就可以转化为COM程序;COM程序加多一个头部,就可以变成EXE程序。
EXE程序可以分为DOS下的EXE程序和WINDOWS下的EXE程序,两种程序的头部结构是不同的。其中WINDOWS下的EXE程序是采用PE结构的。
2011-4-27 23:08
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
MSDN 的博客> 旧的新事物 > COM 和 exe 文件扩展名之间的区别是什么?

COM 和 exe 文件扩展名之间的区别是什么?
雷蒙陈-MSFT
评论科罗问 为什么您可以重命名 COM 没有任何明显的不良影响的 EXE 文件。(James MAstros 问了一个类似的问题,在詹姆斯的问题,将在晚些时候占用额外的问题虽然。)

最初,唯一存在的程序被 COM 文件。COM 的格式文件 … … 嗯,无。没有格式。COM 文件是只是内存中的映像。从 CP/M 继承此的格式。程序加载程序文件加载 COM 文件,只被吸到保持不变,然后跳到第一个字节的内存。没有修正,没有校验和,没有什么。只需加载并去。

COM 文件格式存在许多问题,其中的程序不能大于约为 64 KB。为了解决这些限制,引入 EXE 文件格式。EXE 文件头 "MZ"神奇的字母 开头,并继续与其他程序加载程序将使用该程序加载到内存,它准备执行的信息。

那里东西躺,与 COM 文件"的原始内存映像"和 EXE 文件"结构化,"和严格保持这种区分。如果您重命名为 COM 的 exe 可执行文件,操作系统会尝试执行标头,犹如机器代码 (不很远的地方让你),反之如果您重命名为 EXE 的 COM 文件,程序加载程序会拒绝它神奇的 MZ 头因缺少。

所以当程序加载程序改变完全忽略扩展,以确定它是哪种类型的程序中只使用 MZ 标头是否存在?兼容性,课程。

随着时间推移,程序像 FORMAT.COM, EDIT.COM,和甚至 COMMAND.COM 增长超过约为 64 KB。根据原来的规则,这就意味着延长了改为 exe 文件,但做如此介绍了兼容性问题。毕竟,因为这些文件已经 COM 文件直到那时、 程序或批处理文件,想要说,产卵的命令解释程序,会尝试执行 COMMAND.COM。如果命令解释器被重命名为 COMMAND.EXE,硬编码的程序的名称,这些程序将停止工作,因为当时没有 COMMAND.COM 再。

使程序加载程序更灵活意味着这些"著名节目"可以保留其 COM 的扩展名,而不再受约束的 COM 文件都必须适合到 64 KB 限制。

但等待,如果 COM 程序只是碰巧开头字母 MZ 吗?幸运的是,永远不会发生,因为机器代码为"MZ"反汇编,如下所示:

0100 4D            DEC     BP
0101 5A            POP     DX
第一个指令递减的初始值是未定义的一份登记册和第二的指令出现下溢堆栈。没有健全的程序的开头两个未定义的操作。
2011-4-27 23:13
0
游客
登录 | 注册 方可回帖
返回
//