COM格式

计算机科学领域术语

COM格式文件是一种简单的可执行文件。在迪吉多公司于20世纪70年代推出的操作系统中,.COM被用做包含操作系统支持命令的文本文件的拓展名(类似于Windows系统的.cmd文件)。随着引进CP/M的引进(微型计算机的操作系统),COM扩展相的文件改变为的可执行文件。该格式后来被结转到MS-DOS。虽然MS-DOS中已有更常见的.exe文件格式的,紧凑的COM文件仍然保持活力,并在MS-DOS频繁使用。

MS-DOS二进制格式
COM格式是在CP/M和MS-DOS中使用的原始二进制可执行格式。它很简单因为 它没有标题(除CP/M 3文件外),并且不包含标准元数据,仅包含代码和数据。 这种简单性是一个代价:二进制文件的最大大小为65,280(FF00h)字节(256字节短于64 KB),并将其所有代码和数据存储在一个段中。
由于它没有重定位信息,它被操作系统装载到一个预置地址,在PSP后面的偏移量0100h,它被执行(因此限制了可执行文件的大小):入口点固定为0100h。 这在8位机器上不是问题,因为它们可以最大地处理64k的内存,但是16位机器具有更大的地址空间,这就是为什么格式不再使用的原因。
在Intel 8080 CPU架构中,只能寻址65,536字节的内存(地址范围为0000h至FFFFh)。 在CP/M下,该存储器的前256字节(从0000h到00FFh)被保留供系统零页使用,并且任何用户程序都必须在0100h加载才能执行。 COM文件完全适合这个模型。 在引入MP / M和并行CP / M之前,一次不可能运行多个程序或命令:在0100h加载的程序运行,没有其他运行。
虽然MS-DOS和CP/M中的文件格式相同,但两个操作系统的.COM文件不兼容; MS-DOS COM文件包含x86指令和可能的MS-DOS系统调用,而CP/M COM文件包含8080指令(限于某些机器的程序也可能包含8085或Z80的附加指令)和CP/M系统调用。
DOS中的.COM文件将所有x86段寄存器设置为相同的值,并将SP(堆栈指针)寄存器设置为FFFEh,因此堆栈从内存段的最顶端开始并从那里开始工作。
原来的DOS 1.x API是CP / M API的衍生产品,通过调用INT 20h(终止程序)函数或INT 21h函数0来执行程序终止.COM文件,他们起着同样的作用,程序员还必须确保程序终止时代码和数据段寄存器包含相同的值,以避免潜在的系统崩溃。 虽然这可以在任何DOS版本中使用,但是Microsoft建议使用INT 21h函数4Ch来从DOS 2.x以后的程序终止,它不需要将数据和代码段设置为相同的值。
可以在两个操作系统下运行.COM文件。 在指令级没有真正的兼容性; 入口点的指令被选择为在功能上相同但在两个操作系统中不同,并且使程序执行跳转到正在使用的操作系统的部分。 它基本上是两个不同的程序,在单个文件中具有相同的功能,之前是代码选择要使用的程序。
在CP/M 3下,如果COM文件的第一个字节是C9h,则有一个256字节的标题; 由于C9h对应于8080指令RET,这意味着如果在不支持该扩展的早期版本的CP/M上运行,COM文件将立即终止。(因为8085和Z80的指令集是8080指令集的超集,所以这三个处理器都可以工作。)C9h是8088/8086上的一个无效操作码,它会在v86模式下引发INT 6异常,因为386.由于C9h是自80188/80186以来的LEAVE操作码,因此不被用作有效程序中的第一条指令,因此某些版本的DOS中的可执行加载程序拒绝以C9h开头的COM文件,从而避免崩溃。
文件的名称可能以.COM结尾,但不能采用上述简单格式。 这由文件开头的幻数表示。 例如,DR DOS 6.0中的COMMAND.COM文件实际上是DOS可执行格式,前两个字节表示为MZ(4Dh 5Ah),即Mark Zbikowski的缩写。
在MS-DOS和兼容DOS中,加载器或执行环境没有为COM文件提供内存管理。所有内存都可用于COM文件。执行后,操作系统命令外壳COMMAND.COM将重新加载。这留下了COM文件可能非常简单,使用单个段或任意复杂的可能性,从而提供自己的内存管理系统。一个复杂程序的例子是COMMAND.COM,MS-DOS shell,它提供了一个加载器来加载其他COM或EXE程序。在.COM系统中,可以加载和运行较大的程序(最大可用内存大小),但系统加载程序假定所有代码和数据都在第一段中,并且由.COM程序提供任何代码和数据。进一步组织。如果必要的代码包含在.COM程序中,则可通过动态链接处理大于可用内存或大型数据段的程序。使用.COM而不是.EXE格式的优点是二进制图像通常更小,更容易使用汇编程序进行编程。一旦有足够功率的编译器和链接器可用,将.COM格式用于复杂程序就不再有利。
.COM文件在IBM PC早期之后通常不用于商业软件可执行文件,格式主要用于命令行应用程序。
支持平台
该格式在许多现代基于Windows NT的平台上仍然可执行,但它在MS-DOS仿真子系统NTVDM中运行,并不存在于64位变体中。 COM文件也可以在DOS模拟器(如DOSBox)上执行,在这些模拟器支持的任何平台上。
兼容性
基于Windows NT的操作系统使用.com扩展名来处理从MS-DOS时间传输的少量命令,尽管它们实际上当前实现为.exe文件。 操作系统将识别.exe文件头并正确执行它们,尽管它们在技术上不正确的.com扩展名。 (事实上,任何.exe文件都可以重命名.com并且仍然可以正确执行。)对这些命令使用原始.com扩展可确保与旧的MS-DOS批处理文件兼容,这些文件可能使用完整的原始文件名引用它们。 这些命令是chcp.com,discomp.com,diskcopy.com,format.com,mode.com,more.com和tree.com。
执行效果
在MS-DOS中,如果一个目录同时包含一个COM文件和一个具有相同名称的EXE文件,那么当没有指定扩展名时,将优先选择COM文件进行执行。 例如,如果系统路径中的某个目录包含两个名为foo.com和foo.exe的文件,则以下命令将执行foo.com:
运行foo.exe的用户可以显式使用完整的文件名:
利用这种默认行为,病毒编写者和其他恶意程序员使用notepad.com这样的名字来创建它们,希望如果将它放在与相应的EXE文件相同的目录中,命令或批处理文件可能会意外触发它们的程序 而不是文本编辑器notepad.exe。 再次,这些.com文件实际上可能包含一个.exe格式的可执行文件。
在Windows NT及衍生产品(Windows 2000,Windows XP,Windows Vista和Windows 7)上,PATHEXT变量用于覆盖调用文件的首选项(以及可接受的扩展名)的顺序,而无需在命令行中指定扩展名。 默认值仍然在.exe文件之前放置.com文件。 这与以前在JP Software的扩展命令行处理器4DOS,4OS2和4NT系列中发现的功能非常相似。
恶意使用.com
一些计算机病毒作者希望利用现代计算机用户可能缺乏对.com文件扩展名和相关二进制格式的知识,以及他们更可能熟悉.com互联网域名。 电子邮件已发送附件名称类似于“www.example.com”。 不小心的微软Windows用户点击这样的附件可能会开始浏览一个名为http://www.example.com/的网站,而是运行附件的二进制命令文件www.example,并给予它完全的权限 无论其作者想到的是什么机器。
注意COM文件格式本身没有任何恶意; 这是对.com命令文件和.com商业网站之间巧合名称冲突的利用。
全国各地天气预报查询

上海市

  • 市辖区
  • 云南省

  • 临沧市
  • 云南省

  • 丽江市
  • 云南省

  • 保山市
  • 云南省

  • 大理白族自治州
  • 云南省

  • 德宏傣族景颇族自治州
  • 云南省

  • 怒江傈僳族自治州
  • 云南省

  • 文山壮族苗族自治州
  • 云南省

  • 昆明市
  • 云南省

  • 昭通市
  • 云南省

  • 普洱市
  • 云南省

  • 曲靖市
  • 云南省

  • 楚雄彝族自治州
  • 云南省

  • 玉溪市
  • 云南省

  • 红河哈尼族彝族自治州
  • 云南省

  • 西双版纳傣族自治州
  • 云南省

  • 迪庆藏族自治州
  • 内蒙古自治区

  • 乌兰察布市
  • 内蒙古自治区

  • 乌海市
  • 内蒙古自治区

  • 兴安盟
  • 内蒙古自治区

  • 包头市
  • 内蒙古自治区

  • 呼伦贝尔市
  • 内蒙古自治区

  • 呼和浩特市
  • 内蒙古自治区

  • 巴彦淖尔市
  • 内蒙古自治区

  • 赤峰市
  • 内蒙古自治区

  • 通辽市
  • 内蒙古自治区

  • 鄂尔多斯市
  • 内蒙古自治区

  • 锡林郭勒盟
  • 内蒙古自治区

  • 阿拉善盟
  • 北京市

  • 市辖区
  • 吉林省

  • 吉林市
  • 吉林省

  • 四平市
  • 吉林省

  • 延边朝鲜族自治州
  • 吉林省

  • 松原市
  • 吉林省

  • 白城市
  • 吉林省

  • 白山市
  • 吉林省

  • 辽源市
  • 吉林省

  • 通化市
  • 吉林省

  • 长春市
  • 四川省

  • 乐山市
  • 四川省

  • 内江市
  • 四川省

  • 凉山彝族自治州
  • 四川省

  • 南充市
  • 四川省

  • 宜宾市
  • 四川省

  • 巴中市
  • 四川省

  • 广元市
  • 四川省

  • 广安市
  • 四川省

  • 德阳市
  • 四川省

  • 成都市
  • 四川省

  • 攀枝花市
  • 四川省

  • 泸州市
  • 四川省

  • 甘孜藏族自治州
  • 四川省

  • 眉山市
  • 四川省

  • 绵阳市
  • 四川省

  • 自贡市
  • 四川省

  • 资阳市
  • 四川省

  • 达州市
  • 四川省

  • 遂宁市
  • 四川省

  • 阿坝藏族羌族自治州
  • 四川省

  • 雅安市
  • 天津市

  • 市辖区
  • 宁夏回族自治区

  • 中卫市
  • 宁夏回族自治区

  • 吴忠市
  • 宁夏回族自治区

  • 固原市
  • 宁夏回族自治区

  • 石嘴山市
  • 宁夏回族自治区

  • 银川市
  • 安徽省

  • 亳州市
  • 安徽省

  • 六安市
  • 安徽省

  • 合肥市
  • 安徽省

  • 安庆市
  • 安徽省

  • 宣城市
  • 安徽省

  • 宿州市
  • 安徽省

  • 池州市
  • 安徽省

  • 淮北市
  • 安徽省

  • 淮南市
  • 安徽省

  • 滁州市
  • 安徽省

  • 芜湖市
  • 安徽省

  • 蚌埠市
  • 安徽省

  • 铜陵市
  • 安徽省

  • 阜阳市
  • 安徽省

  • 马鞍山市
  • 安徽省

  • 黄山市
  • 山东省

  • 东营市
  • 山东省

  • 临沂市
  • 山东省

  • 威海市
  • 山东省

  • 德州市
  • 山东省

  • 日照市
  • 山东省

  • 枣庄市
  • 山东省

  • 泰安市
  • 山东省

  • 济南市
  • 山东省

  • 济宁市
  • 山东省

  • 淄博市
  • 山东省

  • 滨州市
  • 山东省

  • 潍坊市
  • 山东省

  • 烟台市
  • 山东省

  • 聊城市
  • 山东省

  • 菏泽市
  • 山东省

  • 青岛市
  • 山西省

  • 临汾市
  • 山西省

  • 吕梁市
  • 山西省

  • 大同市
  • 山西省

  • 太原市
  • 山西省

  • 忻州市
  • 山西省

  • 晋中市
  • 山西省

  • 晋城市
  • 山西省

  • 朔州市
  • 山西省

  • 运城市
  • 山西省

  • 长治市
  • 山西省

  • 阳泉市
  • 广东省

  • 东莞市
  • 广东省

  • 中山市
  • 广东省

  • 云浮市
  • 广东省

  • 佛山市
  • 广东省

  • 广州市
  • 广东省

  • 惠州市
  • 广东省

  • 揭阳市
  • 广东省

  • 梅州市
  • 广东省

  • 汕头市
  • 广东省

  • 汕尾市
  • 广东省

  • 江门市
  • 广东省

  • 河源市
  • 广东省

  • 深圳市
  • 广东省

  • 清远市
  • 广东省

  • 湛江市
  • 广东省

  • 潮州市
  • 广东省

  • 珠海市
  • 广东省

  • 肇庆市
  • 广东省

  • 茂名市
  • 广东省

  • 阳江市
  • 广东省

  • 韶关市
  • 广西壮族自治区

  • 北海市
  • 广西壮族自治区

  • 南宁市
  • 广西壮族自治区

  • 崇左市
  • 广西壮族自治区

  • 来宾市
  • 广西壮族自治区

  • 柳州市
  • 广西壮族自治区

  • 桂林市
  • 广西壮族自治区

  • 梧州市
  • 广西壮族自治区

  • 河池市
  • 广西壮族自治区

  • 玉林市
  • 广西壮族自治区

  • 百色市
  • 广西壮族自治区

  • 贵港市
  • 广西壮族自治区

  • 贺州市
  • 广西壮族自治区

  • 钦州市
  • 广西壮族自治区

  • 防城港市
  • 新疆维吾尔自治区

  • 乌鲁木齐市
  • 新疆维吾尔自治区

  • 伊犁哈萨克自治州
  • 新疆维吾尔自治区

  • 克孜勒苏柯尔克孜自治州
  • 新疆维吾尔自治区

  • 克拉玛依市
  • 新疆维吾尔自治区

  • 博尔塔拉蒙古自治州
  • 新疆维吾尔自治区

  • 吐鲁番市
  • 新疆维吾尔自治区

  • 和田地区
  • 新疆维吾尔自治区

  • 哈密市
  • 新疆维吾尔自治区

  • 喀什地区
  • 新疆维吾尔自治区

  • 塔城地区
  • 新疆维吾尔自治区

  • 巴音郭楞蒙古自治州
  • 新疆维吾尔自治区

  • 昌吉回族自治州
  • 新疆维吾尔自治区

  • 自治区直辖县级行政区划
  • 新疆维吾尔自治区

  • 阿克苏地区
  • 新疆维吾尔自治区

  • 阿勒泰地区
  • 江苏省

  • 南京市
  • 江苏省

  • 南通市
  • 江苏省

  • 宿迁市
  • 江苏省

  • 常州市
  • 江苏省

  • 徐州市
  • 江苏省

  • 扬州市
  • 江苏省

  • 无锡市
  • 江苏省

  • 泰州市
  • 江苏省

  • 淮安市
  • 江苏省

  • 盐城市
  • 江苏省

  • 苏州市
  • 江苏省

  • 连云港市
  • 江苏省

  • 镇江市
  • 江西省

  • 上饶市
  • 江西省

  • 九江市
  • 江西省

  • 南昌市
  • 江西省

  • 吉安市
  • 江西省

  • 宜春市
  • 江西省

  • 抚州市
  • 江西省

  • 新余市
  • 江西省

  • 景德镇市
  • 江西省

  • 萍乡市
  • 江西省

  • 赣州市
  • 江西省

  • 鹰潭市
  • 河北省

  • 保定市
  • 河北省

  • 唐山市
  • 河北省

  • 廊坊市
  • 河北省

  • 张家口市
  • 河北省

  • 承德市
  • 河北省

  • 沧州市
  • 河北省

  • 石家庄市
  • 河北省

  • 秦皇岛市
  • 河北省

  • 衡水市
  • 河北省

  • 邢台市
  • 河北省

  • 邯郸市
  • 河南省

  • 三门峡市
  • 河南省

  • 信阳市
  • 河南省

  • 南阳市
  • 河南省

  • 周口市
  • 河南省

  • 商丘市
  • 河南省

  • 安阳市
  • 河南省

  • 平顶山市
  • 河南省

  • 开封市
  • 河南省

  • 新乡市
  • 河南省

  • 洛阳市
  • 河南省

  • 漯河市
  • 河南省

  • 濮阳市
  • 河南省

  • 焦作市
  • 河南省

  • 省直辖县级行政区划
  • 河南省

  • 许昌市
  • 河南省

  • 郑州市
  • 河南省

  • 驻马店市
  • 河南省

  • 鹤壁市
  • 浙江省

  • 丽水市
  • 浙江省

  • 台州市
  • 浙江省

  • 嘉兴市
  • 浙江省

  • 宁波市
  • 浙江省

  • 杭州市
  • 浙江省

  • 温州市
  • 浙江省

  • 湖州市
  • 浙江省

  • 绍兴市
  • 浙江省

  • 舟山市
  • 浙江省

  • 衢州市
  • 浙江省

  • 金华市
  • 海南省

  • 三亚市
  • 海南省

  • 三沙市
  • 海南省

  • 儋州市
  • 海南省

  • 海口市
  • 海南省

  • 省直辖县级行政区划
  • 湖北省

  • 十堰市
  • 湖北省

  • 咸宁市
  • 湖北省

  • 孝感市
  • 湖北省

  • 宜昌市
  • 湖北省

  • 恩施土家族苗族自治州
  • 湖北省

  • 武汉市
  • 湖北省

  • 省直辖县级行政区划
  • 湖北省

  • 荆州市
  • 湖北省

  • 荆门市
  • 湖北省

  • 襄阳市
  • 湖北省

  • 鄂州市
  • 湖北省

  • 随州市
  • 湖北省

  • 黄冈市
  • 湖北省

  • 黄石市
  • 湖南省

  • 娄底市
  • 湖南省

  • 岳阳市
  • 湖南省

  • 常德市
  • 湖南省

  • 张家界市
  • 湖南省

  • 怀化市
  • 湖南省

  • 株洲市
  • 湖南省

  • 永州市
  • 湖南省

  • 湘潭市
  • 湖南省

  • 湘西土家族苗族自治州
  • 湖南省

  • 益阳市
  • 湖南省

  • 衡阳市
  • 湖南省

  • 邵阳市
  • 湖南省

  • 郴州市
  • 湖南省

  • 长沙市
  • 甘肃省

  • 临夏回族自治州
  • 甘肃省

  • 兰州市
  • 甘肃省

  • 嘉峪关市
  • 甘肃省

  • 天水市
  • 甘肃省

  • 定西市
  • 甘肃省

  • 平凉市
  • 甘肃省

  • 庆阳市
  • 甘肃省

  • 张掖市
  • 甘肃省

  • 武威市
  • 甘肃省

  • 甘南藏族自治州
  • 甘肃省

  • 白银市
  • 甘肃省

  • 酒泉市
  • 甘肃省

  • 金昌市
  • 甘肃省

  • 陇南市
  • 福建省

  • 三明市
  • 福建省

  • 南平市
  • 福建省

  • 厦门市
  • 福建省

  • 宁德市
  • 福建省

  • 泉州市
  • 福建省

  • 漳州市
  • 福建省

  • 福州市
  • 福建省

  • 莆田市
  • 福建省

  • 龙岩市
  • 西藏自治区

  • 山南市
  • 西藏自治区

  • 拉萨市
  • 西藏自治区

  • 日喀则市
  • 西藏自治区

  • 昌都市
  • 西藏自治区

  • 林芝市
  • 西藏自治区

  • 那曲市
  • 西藏自治区

  • 阿里地区
  • 贵州省

  • 六盘水市
  • 贵州省

  • 安顺市
  • 贵州省

  • 毕节市
  • 贵州省

  • 贵阳市
  • 贵州省

  • 遵义市
  • 贵州省

  • 铜仁市
  • 贵州省

  • 黔东南苗族侗族自治州
  • 贵州省

  • 黔南布依族苗族自治州
  • 贵州省

  • 黔西南布依族苗族自治州
  • 辽宁省

  • 丹东市
  • 辽宁省

  • 大连市
  • 辽宁省

  • 抚顺市
  • 辽宁省

  • 朝阳市
  • 辽宁省

  • 本溪市
  • 辽宁省

  • 沈阳市
  • 辽宁省

  • 盘锦市
  • 辽宁省

  • 营口市
  • 辽宁省

  • 葫芦岛市
  • 辽宁省

  • 辽阳市
  • 辽宁省

  • 铁岭市
  • 辽宁省

  • 锦州市
  • 辽宁省

  • 阜新市
  • 辽宁省

  • 鞍山市
  • 重庆市

  • 重庆市

  • 市辖区
  • 陕西省

  • 咸阳市
  • 陕西省

  • 商洛市
  • 陕西省

  • 安康市
  • 陕西省

  • 宝鸡市
  • 陕西省

  • 延安市
  • 陕西省

  • 榆林市
  • 陕西省

  • 汉中市
  • 陕西省

  • 渭南市
  • 陕西省

  • 西安市
  • 陕西省

  • 铜川市
  • 青海省

  • 果洛藏族自治州
  • 青海省

  • 海东市
  • 青海省

  • 海北藏族自治州
  • 青海省

  • 海南藏族自治州
  • 青海省

  • 海西蒙古族藏族自治州
  • 青海省

  • 玉树藏族自治州
  • 青海省

  • 西宁市
  • 青海省

  • 黄南藏族自治州
  • 黑龙江省

  • 七台河市
  • 黑龙江省

  • 伊春市
  • 黑龙江省

  • 佳木斯市
  • 黑龙江省

  • 双鸭山市
  • 黑龙江省

  • 哈尔滨市
  • 黑龙江省

  • 大兴安岭地区
  • 黑龙江省

  • 大庆市
  • 黑龙江省

  • 牡丹江市
  • 黑龙江省

  • 绥化市
  • 黑龙江省

  • 鸡西市
  • 黑龙江省

  • 鹤岗市
  • 黑龙江省

  • 黑河市
  • 黑龙江省

  • 齐齐哈尔市