关于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就可以对这个地址下断点了。