请教一个关与实验十二的问题
在实验十二中,当我们写好程序,进入dubug运行后,随便写一个溢出的程序就会显示我们自己的中断程序,但如果关掉debug在进入写一个溢出的程序,就不会显示我们的中断程序,这么说中断向量表不是只读存储? 为什么我们能改掉其中的一项,重新进入时又恢复原样? 本帖最后由 wAterLoo 于 2012-3-18 22:35 编辑windows里面运行dos是虚拟出来的8086,打开一个dos窗口就会虚拟一次,你在里面操看到的内存地址其实并非内存的真正地址,也就是你第二次使用的dos窗口和第一次的dos没有一点一点联系,如果你在执行完内存中断程序,然后用q命令退出debug程序,记住,这时候别关掉dos窗口,继续用这个窗口运行你的溢出程,你会发现结果还在,而你关掉窗口后dos虚拟的这段内存可能已经被销毁了,而且打开的新的dos程序也不一定会分配到原来的内存空间
你修改的只是dos虚拟出来的中断向量表
本帖最后由 wAterLoo 于 2012-3-18 18:15 编辑
中断向量表里的值在修改后重启电脑前都是有效的
朋友,还是先贴出你的代码吧
我估计是你代码里面有些小问题
可能呢是你将中断向量表里面的除法中断的地址指向代码段的地址
你试试我的
assume cs:code code segmentstart:mov ax,cs mov ds,ax mov si,offset do0 ;设置ds:si指向源地址 mov ax,0 mov es,ax mov di,200h ;设置es:di指向目标地址 mov cx,offset do0end-offset do0 ;设置cx为传输长度 cld ;设置传输方向为正 rep movsb mov ax,0 mov es,ax mov word ptr es:,200h mov word ptr es:,0 ;设置中断向量表 mov ax,4c00h int 21h do0: jmp short do0start db 'divide error!' do0start:mov ax,cs mov ds,ax mov si,202h ;设置ds:si指向字符串 mov ax,0b800h mov es,ax mov di,12*160+34*2 ;设置es:di指向显存空间的中间位置 mov cx,13 ;设置cx为字符串长度s: mov al, mov es:,al inc si add di,2 loop s mov ax,4c00h int 21h do0end:nopcode endsend start
wAterLoo 发表于 2012-3-18 18:09 static/image/common/back.gif
中断向量表里的值在修改后重启电脑前都是有效的
朋友,还是先贴出你的代码吧
我估计是你代码里面有些小问 ...
不会呀,重新关掉dos,再进入就恢复原样了,你这个也一样,不信你试下 知道了,谢谢
页:
[1]