有时我们用DOS来调试自己写的操作系统,很难确切获知操作系统的入口地址,所以设置断点也比较麻烦。
有一个解决方法就是在一个已知的地址设置断点,然后让指令跑到那个已知的地址再跑回原来的地方,这样就可以实现断点的设置了,这个就叫挖坑设置断点。
在DOS中,物理地址为0x200的内存是没有被使用的,所以可以在此处挖一个坑,让程序跑进来再跑出去。
1 [SECTION .s16]
2 [BITS 16]
3 Hoot: ;坑的入口点
4 mov ax,01h
5 mov ax,02h
6 GoBack:
7 jmp 0:Back ;跳出坑外,执行正常的程序流
8 HootLen equ $ - Hoot
9
10 LABEL_BEGIN: ;入口点
11
12 ;设置坑
13 mov ax,cs
14 mov [GoBack + 3],ax
15 mov ds,ax
16 mov si,Hoot
17 mov ax,0
18 mov es,ax
19 mov di,200h
20 mov cx,HootLen
21 rep movsb
22 jmp 0:200h ;跑到坑里面
23
24 Back: ; 跳出坑以后,从这里开始执行
25 mov ax,cs
26 mov ds,ax
27 mov es,ax
28 mov ss,ax
29 mov sp,0100h
只要在物理地址为0x200处设置一个断点,就可以让程序在执行我们的代码前先暂停一来。