| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
用汇编编写DOS下的内存驻留程序(1)
作者:未知    文章来源:网络    点击数:    更新时间:2006-7-19
  程序保存栈中的数据被TSR的数据覆盖掉;但如果调用不同栈的DOS功能,那将是安全的.INT 21H中的几个功能调即33H,50H,  51H,62H,和64H由于非常简单,使用用户栈,因此在任何情况下都是可重入的.避免这种不可重入的简单方法是当前台程序正处在INT 21H 中时,不要调用INT 21H.或者如果前台程序正在处理INT 21H时,只允许调用不同栈的INT 21H功能.
  〉DOS数据区中有一个InDOS标志,也探源为DOS安全标志,表示当前访问DOS功能是来否安全.由于DOS不可重入,它指示当前是 否处于DOS中,激活TSR和代码可检查该标志(34H),如果DOS忙,则不能激活使用INT 21H 调用的TSR.
  〉当前台程序执行能设置错误状态的DOS功能时,DOS会把扩展错误信息存放起来,正常情况下,前台程序可以读取扩展错误信息; 如果在前台程序读取信息之前激活TSR,且TSR也执行能报告错误信息的DOS功能,则后来的错误信息会覆盖原来的错误信息,前台程序就 会得不到正确的错误信息.因此必须在激活TSR之前保存(59H)这些错误信息,并在退出以前把它们恢复(5D0AH)成原来的值.
  〉大多硬件中断如INT 13H,INT 0BH和INT 0CH等都是不可重往返.如果设置一引起寄存器,而在此时被TSR打断,执行类似的设置 ,就会出现非常情况,端口是不会自动保持值的.在进入这些中断时设置一个进入的标志,如果TSR检查到标志已置,则不调用相应的中断.
  〉最好也不要重入INT 10H,INT 25H,和INT 26H中断.在进入这些中断时设置一个进入的标志,如果TSR检查到标志已置,则不调用 相应的中断.
  〉最好能接管INT 1BH,INT 23H和INT 24H中断.
  〉保存DOS的数据交换区(SDA)可以安全地使用的DOS的功能.SDA保存了DOS几乎所有内部数据,如果保存(5D06H)和恢复(5D0BH)SDA ,DOS就变成在任何时候都可以重入的了.当DOS处在关键区中时,调用INT 2AH.一旦处在关键区中,就不能改变SDA.在关键区的结束处会 调用INT21H的81H和82H功能.
0.3 内存驻留程序设计一般过程
 驻留程序分成两个部分,即暂驻部分和驻留部分.驻留程序要完成安装检测,激活和删除等过程.
 基本上可抽象成以下几个过程:
  〉取中断向量
  〉保存旧的中断向量
  〉设置或恢复中断向量
  〉中断处理程序的链接
  〉检测是来呀已驻留
  〉执行终止并驻留
  〉TSR的删除
 删除TSR比较复杂,必须按下列步骤进行:
  〉检查中断向量是否已经被替换.如果没有替换,就恢复所有的中断向量;如果某个中断向量被替换,则跳过下面各步,不能删除该 TSR.
  〉TSR的PSP中偏移量16H存放着父进程的PSP.把这个值改为当前进程的地址.
  〉把当前PSP设为TSR的PSP
  〉执行INT 21H的4CH功能,释放TSR占用的内存,关闭所有文件,并使用PSP中存放的父进程地址和终止地址.
  〉这里控制返回到初始进程中,当前PSP也指向初始进程,所有寄存器值包括SS和SP都不确定.
 在执行完上述步骤后,要恢复寄存器.
 如果要无条件地删除TSR,必须监控每个TSR对中断向量表,内存控制块和设备驱动程序链的修改.
0.5 缩写语表
 ASCIZ: 以零结束的ASCII字符串.
 BPD:  "BIOS Parameter Block (BIOS 参数块)"的缩写.含有对驱动器的低级参数的说明.
 CDS:  "Current Directory Structure(当前目录结构)"的缩写,含有某个逻辑驱动器的当前目录,类型和其它信息.
 DPB:  "DOS Drive Parameter Block(DOS驱动器参数块)"的缩写,含有某个逻辑驱动器的介质说明及一些内部信息.
 DPL:  "DOS Parameter List (DOS参数表)"的缩写,该数据结构用来传递参数给SHARE和网络功能调用.
 DTA:  "Disk Transfer Address(磁盘传输地址)"的缩写,指示对磁盘进行数据读写的功能调用不必显式地给出缓冲区地址.
 FAT:  "File Allocation Table(文件分配表)"的缩写,磁盘的文件分配表记录了所使用的簇信息. 
 FCB:  "File Control Block(文件控制块)"的缩写,在DOS的1.X版本中,用FCB来记录文件打开的状态.. 
 IFS:  "Installable File System(可安装的文件系统)"的缩写,它允许一个非DOS格式的介质被DOS所使用. 大多数情况下IFS     与网络驱动器非常相似,尽管IFS最典型的情况是一个本地驱动器而不是一个远程驱动器. 
 JFT:  "Job File Table(工作文件表)或Open File Table(打开文件表)"的缩写,程序PSP中的JFT可用来将文件句柄转换成SFT值.
 NCB:  "Network control Block(网络控制块)"的

上一页  [1] [2] [3] [4] [5] 下一页


相关文章