当前位置: 代码迷 >> 汇编语言 >> 怎么让已经驻留在内存的程序退出并卸载
  详细解决方案

怎么让已经驻留在内存的程序退出并卸载

热度:615   发布时间:2013-02-26 00:00:00.0
如何让已经驻留在内存的程序退出并卸载?
用汇编写了个可以驻留内存的程序,现在出不来了,不知道怎样卸载它?有人能解释一下应该怎样退出和卸载么?如果COM和EXE不一样请分别说一下~~

------解决方案--------------------------------------------------------
判断是否驻留, 一般地有两个方法. 一个是程序截留某个中断的特殊的功能号, 返回一个特殊的值. 因为一般的中断调用, 对于不支持的功能都是直接返回的, 所以返回了一个自己预设的特殊值的话, 就认为是自己已经驻留了, 当然了, 还要同时返回已经驻留的地址. 这个方法还是有些风险的, 主要是功能号的选择, 以及不同驻留程序间极少可能的冲突. 另外一个方法, 就是遍历内存块, 检测在特定的位置是否含义自己的特征字符串.
也许, 对初涉驻留来说, 可能简单地检测被截留中断入口也是个方法. 不过, 这个是比较不周全的. 因为, 有可能在自己驻留后, 另外的其它程序驻留也拦截了这个中断.
------解决方案--------------------------------------------------------
主要实现方式就是由程序的第二个实例给驻留的实例发一个退出信号(自定义的),然后自己就终止了。
驻留的实例收到退出信号,首先检测能否退出,如果能退出:
1. Int 21h ax=50h切换PID为自己的PSP(驻留时保存的);
2. 释放资源(恢复自己修改过的中断向量、释放动态分配的内存、关闭打开的文件Handles等);
3. 使用正常的DOS终止来结束程序(INT 21h AH=4Ch)。
  相关解决方案