COM文件与EXE文件的区别

以COM为扩展名的文件的特点如下:
  1.程序只能设置一个段,且不建立堆栈段;
  2.程序的长度必须少于64K字节;
  3.程序必须预留100H空间,开始处是一条可执行指令;
  4.程序被装入的起始标号必须由END语句说明开始地址;
  5.程序中的子程序必须具有近程属性(NEAR);
  6.如果COM文件是由几个不同的目标模块链接生成的,要求所有目标模块具有同一代码段名和类别名(CLASS),且赋予公共属性(PUBLIC),而主模块应具有100H的入口指针并优先连接。
  7.COM文件的cs,ds,ss,es都指向同一个段。

  8.COM文件在装入时,由系统自动把SP建立在该段之末。


  9.COM文件中的过程只能定义为近程NEAR

  10。COM文件的程序小而简单,其运行速度比EXE快

       11.COM文件是由程序本身的二进制代码组成,它没有EXE文件所包括的有关文件信息的标题区(header),所以它占用的存储空间比EXE小。


EXE文件的结构特点如下:
  1.程序允许建立若干不同名的代码段、数据段、堆栈段或附加段。
  2.程序的长度仅受当前内存可用空间的限制。
  3.程序的入口随应用而定,只需起始标号与END语句说明的起始地址一致。
  4.程序中的各个子程序的属性随段内或段间调用而定为NEAR或FAR。
  5.连接生成EXE文件的各个不同的目标模块内的代码段,数据段或附加段可取同名或独立命名。但要求只有主模块的END语句指出程序入口的起始标号,并至少有一个具有STACK属性的堆栈段。

BIN文件只是包括了纯粹的二进制数据

program segment prefix ,简称PSP(程序段的前缀)
当输入一个外部命令或通过EXEC子功能(系统功能调用INF 21h的子功能号为4BH)加载一子程序时,COMMAND确定当时内存可用空间的最低端作为程序段起点。在程序所占内存空间的前256个字节中,系统会为程序创建程序的前缀(PSP)的数据区,DOS要利用PSP来和被加载程序进行通信;PSP内有程序返回、程序文件名等信息,可以通过研究psp定位文件名信息,进而获取文件名。
从这段内存区的256字节处开始(在PSP的后面),将程序装入,程序的地址被设为SA+10H:0 (其中SA为系统为程序分配内存的起始位置的段地址即当前寄存器DS的内容);
(注意:PSP区和程序区虽然物理地址连续,却有不同的段地址。)
该PSP中包含以下三部分信息:
(1)供被加载程序使用的DOS入口,如PSP+0、+2、+5和+2CH字段;
(2)供DOS本身使用的DOS入口,如PSP+0AH、+0EH、+12H和+2CH字段;
(3)供被加载程序使用传递参数,如PSP+5CH,+6CH和80H字段。
PSP结构与CP/M中的“控制区域”是十分相近的。这是因为,DOS本身便是从CP/M演变而来的。!
程序段前缀PSP格式:
偏移字节数说 明
000002中断20H
000202以节计算的内存大小(利用这个可看出是否感染引导型病毒)
000401保留
000505至DOS的长调用
000A02INT 22H 入口 IP
000C02INT 22H 入口 CS
000E02INT 23H 入口 IP
001002INT 23H 入口 CS
001202INT 24H 入口 IP
001402INT 24H 入口 CS
001602父进程的PSP段值(可测知是否被跟踪)
001814存放20个SOFT号
002C02环境块段地址(从中可获知执行的程序名)
002E04存放用户栈地址指针
00321E保留
005003DOS调用 ( INT 21H / RETF )
005302保留
005507扩展的FCB头
005C10格式化的FCB1
006C10格式化的FCB2
007C04保留
008080命令行参数长度(不包含总为最后的0D)及参数也是程序运行期间缺省的DTA
另外:保存INT 22/INT 23/INT 24H的值使得用户在程序中可修改这些中断的值,病毒就曾利用这种技术防止不能传染时引起出错信息。在程序退出时根据PSP中保存的值恢复各中断的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值