第八篇 TSR程序设计初探
2012-11-30 00:36
225 查看
这篇博文介绍一个简单的TSR程序设计的例子。
一、TSR是什么
TSR是内存驻留程序(Terminate and Stay Resident Program)的简称。内存驻留程序是指这样
一种程序,TA在执行结束后,将一部分留在内存中,受到操作系统的保护,可由外界激活。一
般来说,TSR都会和DOS或BIOS中断相联系。
二、本篇博文介绍的TSR的设计思路是什么
设计的功能:当运行TSR后,用户无论输入什么,屏幕上只会显示“A TSR was installed in the
computer by lulipeng!”。(输入控制字符没有效果,如shift、ctrl,因为其不在键盘
缓冲区)
设计的方法:①将16h号中断的地址改为自己编写的程序的地址,保留原中断地址,以便根据需
要调用。
②DOS功能调用int 16h,a=10h是从键盘缓冲区读取字符,al=读取字符的ASCII。
只要将相应的al改为自己预先设计好的按一定顺序输出的字符即可。
③为什么②中的方法可行,博主猜测,当在command.com中输入字符时,该程序
会调用int 16h的10h号功能读取字符的ASCII,然后输出。我们只要中途截获al,
改变其即可。
三、值得注意的地方
代码是在win7旗舰版下command.com中实验成功。在cmd.exe中没有效果!
很遗憾我也不明白其中原委?
四、代码
五、结果截图
一、TSR是什么
TSR是内存驻留程序(Terminate and Stay Resident Program)的简称。内存驻留程序是指这样
一种程序,TA在执行结束后,将一部分留在内存中,受到操作系统的保护,可由外界激活。一
般来说,TSR都会和DOS或BIOS中断相联系。
二、本篇博文介绍的TSR的设计思路是什么
设计的功能:当运行TSR后,用户无论输入什么,屏幕上只会显示“A TSR was installed in the
computer by lulipeng!”。(输入控制字符没有效果,如shift、ctrl,因为其不在键盘
缓冲区)
设计的方法:①将16h号中断的地址改为自己编写的程序的地址,保留原中断地址,以便根据需
要调用。
②DOS功能调用int 16h,a=10h是从键盘缓冲区读取字符,al=读取字符的ASCII。
只要将相应的al改为自己预先设计好的按一定顺序输出的字符即可。
③为什么②中的方法可行,博主猜测,当在command.com中输入字符时,该程序
会调用int 16h的10h号功能读取字符的ASCII,然后输出。我们只要中途截获al,
改变其即可。
三、值得注意的地方
代码是在win7旗舰版下command.com中实验成功。在cmd.exe中没有效果!
很遗憾我也不明白其中原委?
四、代码
code segment assume cs:code oldInt16 dw ?,? msgIndex dw 0 msg db 'A TSR was installed in the computer by lulipeng!' newInt16 proc far ;cmp ah,0 ;je leave cmp ah,10h je go_1 jmp dword ptr oldInt16 ;如果不是读键盘输入,则调用原来int 16h,然后直接返回 go_1: pushf call dword ptr oldInt16 ;调用原int 16h,把字符读进al中 cmp al,0dh je go_2 ;如果是回车,表示本次输入结束,回车符不做处理 push si mov si,msgIndex mov al,msg[si] ;将原来的字符改为程序员规定的字符 inc si cmp si,48 je go_3 back: mov msgIndex,si pop si jmp done go_3: mov si,0 jmp back go_2: mov msgIndex,0 done: iret newInt16 endp start: ;用int 21h,ah=35h,al=16h取出16h号中断的地址,存在es:bx中 mov al,16h mov ah,35h int 21h mov oldInt16,bx mov oldInt16[2],es ;利用int 21h,ah=25h,al=16h,把ds:dx中地址写给16h号中断 push cs pop ds mov dx,offset newInt16 mov al,16h mov ah,25h int 21h ;将start标号前的内容驻留内存 mov dx,offset start int 27h mov ah,4ch int 21h code ends end start
五、结果截图
相关文章推荐
- WebSphere MQ程序设计初探
- WebSphere MQ程序设计初探
- WebSphere MQ程序设计初探(转载)
- 泛型程序设计之 Trait 与 Policy 技巧初探
- WebSphere MQ程序设计初探
- 《ASP.NET Ajax程序设计-第I卷:服务器端ASP.NET 2.0 AJAX Extensions与ASP.NET AJAX Control Toolkit》2007年4月16日 china-pub全国首发!+ 赠书名单已经确定
- occ sample geometry 分析初探1
- 程序设计思考
- iOS UI Automation 初探
- POJ c++ 程序设计 第五周 Part1
- Linux防火墙初探
- 2017年浙江工业大学大学生程序设计迎新赛预赛 H - 栗酱的文明
- 《ASP.NET AJAX程序设计 第I卷 服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit》连载&最新更新
- 学习程序设计方法
- 现代程序设计 作业6
- RESTEasy 初探(二) --- 安装/配置
- 北京林业大学“计蒜客”杯程序设计竞赛 网络赛 乘电梯
- 浅谈程序设计
- 2017年浙江中医药大学大学生程序设计竞赛(重现赛)-H剪纸
- [SQL Relay文档] SQL Relay用于PHP API的程序设计 (英文)