求助:截取中断后返回的问题?
目的: 17h中断为打印中断,希望打印前修改打印的内容,而后再去执行打印.
方式:截取int 17h中断,执行一段代码,而后再返回到int 17h中断的服务程序入口.
实施:修改int 17h的中断服务程序入口,转向自己编写的代码,而后,恢复int 17h的中断服务程序入口地址,继续执行.
问题:1、汇编中实现,是直接对内存单元的内容进行修改吗?怎样可以恢复继续执行 int 17h的中断服务程序?
2、17h的中断入口地址是: 17h*4=5c; 是否80286以上的机器,不再是直接*4这么简单? 但我在机器上执行,发现就是*4的结果为入口地址,疑惑中。。。。
罗嗦了,谢谢有耐心读完,能解答就更是感谢了!
新年了,祝心情愉快!
[385 byte] By [
ti_ta] at [2008-1-9]
1. 是通过修改内存单元来实现的. 实方式下中断是以中断向量表的形式存在于系统最低端的1K字节空间中.
可以在你的程序中用一变量保存原来17h号中断的入口地址, 然后用 call/jmp 来转向17h号中断处理程序. 在DOS下可以通过DOS提供的25号功能调用来置中断向量, 35号来取中断向量.
-----------------------
2. 在实方式下, 仍然是使用中断向量表的方式来处理中断, 因此仍然可以用 "向量号*4 "来计算, 但在保护模式下专门有张中断描述符表来指定各个中断, 再使用这个方法就行不通了.
-------------------------------------------
不对的地方, 请大家指正.
多谢赐教了.
所介绍的上述方式,已经做了尝试.看了回复,有了新的疑问!
1、咱们现在讨论的都是DOS模式的基础上吧!我希望每次打印,都调用我修改后的中断服务程序入口地址的代码,是需要编写驻留内存的程序?
2、希望在windows下,执行打印(17h中断)时候,调用的也是我修改后的中断服务程序入口地址代码。
这个应该是在保护模式下吧!这样的话,要怎样实现呢?这个问题有点大,可否指点一下,我去尝试。
实在抱歉了,是一新手,多谢帮助啊!
1. 不驻留也行, 不过得保证系统不会使用这段存放代码的空间.
2. windows下是采用虚拟的8086方式(V86方式), 系统有对其进行监控的程序, 来模拟V86方式下的中断. LZ可以看看保护模式下的书籍, 里面对V86方式有更详细的介绍. :)
也就是说,在windows下,不可以修改 int 17h 中断的入口地址!?
前有帖子说,得写windows驱动,才能实现.本人不太懂这方面的东东啊!迷惑