



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言高级程序设计讲座第七讲 程序内存驻留程序(TSR)鹏程C语言教学网站 庆祝建站一周年 特别企划本文技术支持网站:29 这一讲是上一讲的延续。 在C语言中,可以用keep ( )函数将程序驻留内存。这个函数有两个参数:status和size。size为驻留内存长度,可以用size=_SS+_SP/16-_psp得到,当然这也是一种估算的方法,并不是精确值。函数执行完以后,出口状态信息保存在status中。比如,对于上面的例子,将“geninterrupt (0x60);”改写成“keep(0,_SS+_SP/16-_psp);”后再执行程序,这一段程序就被驻留,此后在其它的任何软件或程序设计中,只要用到了60H号中断,就会在屏幕上显示“This is an example!”的字样。要恢复系统对60H号中断的定义,只能重新启动计算机。 像上一讲的例子其实还很不完善,它没有考虑DOS系统环境的状态、没有考虑程序是否已经驻留内存、没有考虑退出内存驻留等问题。对于第二个问题还是很容易解决的:执行程序一开始就读取某一函数中断入口地址(如63H号中断)判断是否为空(NULL),如果为空就先将该地址置为非空再驻留内存,若为非空则表示已经驻留并退出程序。这一步判断非常重要,否则将会因为重复驻留占用过多内存空间而最后造成系统崩溃。至于其它两个问题,在此不多作说明,有兴趣的读者可以参考一些有关书籍。 不仅如此,我们还可以通过在DOS下使用热键(Hotkey)来调用内存驻留程序。比如将希望汉字系统自带的希望词典驻留内存后,在任意时刻按下Ctrl+F11键,就能激活程序,出现词典界面。微机的键盘中有一个微处理芯片,用来扫描和检测每个按键的按下和释放状态。大多数按键都有一个扫描码,告知CPU当前的状态,但一些特殊的键如PrintScreen、Ctrl+Break等不会产生扫描码,而直接产生中断。正因为如此,我们可以将Ctrl+Break产生的中断号指向我们自己写好的程序入口地址,那么当按下Ctrl+Break后,系统就会调用我们自己的程序去执行,这实际上也就是修改了Ctrl+Break的中断向量。至于其它按键激活程序则可以利用9H号键盘中断捕获的扫描码来实现,在此不多作说明。例如,执行下面的程序后,退回DOS系统,在任意的时候按下Ctrl+Break后,屏幕的底色就会变成红色。#include #include #ifdef _cplusplus#define _ARGU .#else#define _ARGU#endifvoid interrupt newint(_ARGU); /*函数声明*/void install (void interrupt (*fadd)(_ARGU), int num);int main()install (newint,0x1b); /*Ctrl+Break中断号:1BH*/keep(0,_SS+(_SP/16)-_psp); /*驻留程序*/return 0;void interrupt newint(_ARGU)textbackground(4); /*设置屏幕底色为红色*/clrscr(); /*清除屏幕*/void install (void interrupt (*fadd)(_ARGU), int num)disable();setvect(num,fadd); /*设置中断*/enable(); 由于13H号中断是BIOS提供的磁盘中断服务程序,对于DOS下的应用程序,它们的存盘、读盘功能都是通过调用这一中断来实现的。有许多DOS下的病毒就喜欢修改13H号中断来破坏系统,例如,修改13H号中断服务程序,将其改成:void interrupt new13(_ARGU) if (病毒发作条件成熟) 修改入口参数指向病毒程序入口地址; 执行病毒代码;调用原来的13H中断; 只要当任一软件(如EDIT.COM等)对磁盘有操作并且病毒发作条件成熟时,病毒就被激活。当然,这样做会导致可用内存空间减少,容易被用户发现。一些“聪明”的病毒又会去修改其它的中断向量,使得系统报告的内存大小和实际相符合。还有的病毒,当发现用户通过一些程序(如DEBUG.COM等)去跟踪它时,它会悄悄地溜掉,其基本原理仍然与修改中断有关。硬盘的0面0柱1扇区(Side 0 Cylinder 0 Sector 1)保存着重要的引导信息,一旦破坏,计算机将无法识别硬盘。我们可以写一个程序来防止任何软件(包括病毒)对这一扇区执行“写”操作,一定程度上实现了“写保护”的作用,它的基本原理就是修改13H号中断向量并常驻内存,监视着软件(包括病毒)对磁盘操作的每一个细节。读者请注意:本程序没有考虑内存驻留的退出,如果想恢复13H号中断,请重新启动计算机。#include #include #include #define STSIZE 8192#define PSP_ENV_PSP 0x2c#define PARA(x) (FP_OFF(x)+15)4)typedef struct unsigned bp,di,si,ds,es,dx,cx,bx,ax,ip,cs,flags; INTERRUPT_PARAMETER;void install (void interrupt (*faddress)(), int num);void interrupt new13(INTERRUPT_PARAMETER p);int main()union REGS regs;struct SREGS sregs;unsigned mem;unsigned far *pointer;char far *stack;printf(n version 1.0nn); if (stack=malloc(STSIZE)=NULL) printf (Not enough Memory!n); exit(1); if (getvect(0x62)!=NULL) printf(Already Installed!n); exit(1); install(getvect(0x13),0x62);install (new13,0x13);pointer=MK_FP(_psp,PSP_ENV_PSP);freemem(*pointer);segread(&sregs);mem=sregs.ds+PARA(stack)-_psp;setblock(_psp,mem);keep (0,mem);return 0;void install (void interrupt (*faddress)(), int num)disable();setvect(num,faddress);enable();void interrupt new13(INTERRUPT_PARAMETER p)p.ax=_AX;p.cx=_CX;p.dx=_DX;if(_AH=0x03&_CH=0&_CL=0x01&_DH=0&_DL=0x80) return;enable();geninterrupt (0x62);disable();_AX=p.ax;_CX=p.cx;_DX=p.dx;return; 说明:在使用本程序以前,请:用杀毒软件对计算机引导扇区、内存和所有文件进行一次全面的扫描,确信计算机中没有任何病毒;有计算机汇编语言基础的读者可以自己写一个新的引导程序,先将本程序驻留内存,再调用原来的引导程序,以便在病毒还没有取得系统控制权以前开启防护功能。 最后简要说明一下DOS系统重入问题。DOS是单用户单任务操作系统。如果程序在执行的过程中被打断,就有可能因为破坏了原来的程序运行环境而造成运行不正常,这是灾难性的。当中断产生后,CPU立即中止当前的程序去执行中断服务程序,如果在中断服务程序中又有对DOS中断的调用(如DOS的21H号中断)时,这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辽宁省普通高中2025-2026学年高二上学期期初开学考试生物学调研练习卷(原卷版)
- 2025-2030定制化家政服务产品开发与市场验证研究报告
- 人体解剖学课件
- 金融机构2025年风险管理数字化转型中的金融科技风险管理
- 黑龙江省汤原高中2026届高三化学第一学期期中质量检测试题含解析
- 人体脊柱形体课件
- 2025年血液系统疾病患儿的护理试题(附答案)
- 2025年标准预防试题(附答案)
- 凉山州初三毕业数学试卷
- 传染病高级职称课件
- 兰花花叙事曲二胡曲谱
- 调解协议书电子版5篇(可下载)
- 材料性能学(第2版)付华课件1-弹性变形
- GB/T 4909.4-2009裸电线试验方法第4部分:扭转试验
- PDCA质量持续改进案例一:降低ICU非计划拔管发生率
- 2023年烟台蓝天投资开发集团有限公司招聘笔试题库及答案解析
- 企业标准编写模板
- 初中道德与法治 九年级(维护祖国统一)初中道德与法治九年级作业设计样例
- 幼儿园绘本故事:《骄傲的大公鸡》 课件
- 江西省赣州市于都县2022-2023学年九年级化学第一学期期中监测试题含解析
- 新冠核酸检测实验室PCR管八联管滤芯吸头等耗材质检和储存程序
评论
0/150
提交评论