COM文件与EXE文件的区别

来源:互联网 发布:php伪造来路 编辑:程序博客网 时间:2024/05/21 11:00

以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中断20H000202以节计算的内存大小(利用这个可看出是否感染引导型病毒)000401保留000505至DOS的长调用000A02INT 22H 入口 IP000C02INT 22H 入口 CS000E02INT 23H 入口 IP001002INT 23H 入口 CS001202INT 24H 入口 IP001402INT 24H 入口 CS001602父进程的PSP段值(可测知是否被跟踪)001814存放20个SOFT号002C02环境块段地址(从中可获知执行的程序名)002E04存放用户栈地址指针00321E保留005003DOS调用 ( INT 21H / RETF )005302保留005507扩展的FCB头005C10格式化的FCB1006C10格式化的FCB2007C04保留008080命令行参数长度(不包含总为最后的0D)及参数也是程序运行期间缺省的DTA另外:保存INT 22/INT 23/INT 24H的值使得用户在程序中可修改这些中断的值,病毒就曾利用这种技术防止不能传染时引起出错信息。在程序退出时根据PSP中保存的值恢复各中断的值。

原创粉丝点击