DOS病毒编制的关键技术-COM文件

发表于:2015-08-15 14:49 阅读:

  COM 文件比较简单,文件长度限定在64KB以内,全部内容安排在一个段地址空间内。这种文件包含程序的一个绝对映象,也就是说,为了运行程序处理器指令和内存中的数据,MS-DOS直接把该映象从文件拷贝到内存而加载COM程序,而不作任何改变。

  为加载一个COM程序,MS-DOS首先试图分配内存,因为COM程序必须位于一个64KB的段中,所以COM文件的大小不能超过65,024字节,即64KB减去用于PSP(程序段前缀)的256字节和用于一个起始堆栈的至少256字节。如果MS-DOS不能为程序、一个PSP、一个起始堆栈分配足够内存,则分配尝试失败。如果分配成功,MS-DOS分配尽可能多的内存(直至所有保留内存),即使COM程序本身不能大于64KBCOM文件的内存映象如图4-1所示。在试图运行另一个程序或分配另外的内存之前,大部分COM程序释放任何不需要的内存。

4-1 COM文件内存映象图

 

  分配内存后,MS-DOS在该内存的头256个字节建立一个PSP,如果PSP中的第一个FCB(文件控制块)含有一个有效驱动器标识符,则置AL00H,否则为0FFH

  建立PSP后,MS-DOSPSP的后面立即开始(偏移100H)加载COM文件,它置SSDSESPSP的段地址,接着创建一个堆栈。

  MS-DOS通过把控制权传递给偏移100H处的指令而启动程序。程序设计者必须保证COM文件的第一条指令是程序的入口点。

  值得注意的是,因为程序是在偏移100H处加载,因此所有代码和数据偏移也必须相对于100H。汇编语言程序设计者可通过置程序的初值为100H而保证这一点。例如,通过在源程序的开始处使用org 100H语句。

此文章节选自《计算机病毒与木马程序剖析》


(非特殊说明,本文版权归原作者所有,转载请注明出处 )
鸣人致力于为企业提供数据恢复、机房建设、数据库运行、运营及安全等全方位服务。




想在手机上、随时获取互联网前沿、设计资讯以及各种意想不到的"福利"吗?通过微信扫描二维码快速添加