关于BOCHS调试保护模式程序的思路

在DOS下调试保护模式程序不能用DEBUG或者TURBO DEBUGGER等调试器,而BOCHS则可以。因为我们不知道程序加载的时候其物理地址是多少,所以没办法在程序的指定物理地址下断点,但是我们可以把断点下到一个系统固定的地址,这个地址的数据应该是非关键的,然后我们把这个地址里的内容PATCH成RET(F),把我们要调试程序的入口代码加上一段跳转到这个地址,然后我们在BOCHSDBG里对这个地址下断点,代码断到这个地址后,继续执行一个RET(F)就跳回我们要调试的程序地址空间里去了。

 

转载别人的一段代码:

jmpseg   equ   40h      ;打算修改的段
mov      ax,jmpseg
mov    ds,ax               ;ds=打算修改的段
mov       ax,ds:[0]            ;修改 ds:0 的位置
push       ax               ;安全起见,在堆栈保存这个位置的值
mov      byte ptr ds:[0],0cbh      ;将这个位置设置为 retf
push      cs
push      offset    back            ;设置返回位置
db      0eah               ;远跳转
dw      0
dw      jmpseg
back:                  ;跳过去后马上回来
pop      ax
mov      ds:[0],ax            ;再恢复下面就是继续执行了

BOCHS中断系统的时候,用vb 0x40:0就可以对这个地址下断点了。

posted @ 2010-03-01 00:20  robinh00d  阅读(731)  评论(0编辑  收藏  举报