调试器内部机制与实现
1. 调试基础回顾
在之前的调试会话中,我们可以逐行执行高级语句并打印特定变量的值,这比通过解析寄存器和转储内存来推断程序状态信息要方便得多。
2. 自定义调试基础设施:DOS 调试
2.1 DOS 调试中断
所有商业操作系统都为调试提供了钩子,通常以系统调用的形式实现,用于访问内核中的调试设施。但 DOS 是个例外,作为实模式操作系统,由于不存在内存保护,几乎可以自行完成所有操作。
要实现一个最小的 DOS 调试器,只需为以下两条 Intel 机器指令实现中断服务例程(ISR):
- INT Ox3 :表示断点
- INT Ox1 :支持单步执行
当程序遇到 INT Ox3 指令时,处理器会自动定位中断向量表(IVT)中的第四个条目,该表位于内存底部,起始地址为 oxooooo 。每个中断表条目(向量)都有自己专门的 ISR,存储着其实模式段:偏移地址。
通常, INT Ox3 的 ISR 不做任何事情,只是一个占位例程。若要在遇到 INT Ox3 指令时执行特定操作,需要在 IVT 中注册自己的 ISR。
Intel 处理器有一个名为 FLAGS 的寄存器,其第九位是陷阱标志(TF)。当 TF 标志置为 1 时,处理器将执行一条指令,然后自动执行 INT Ox1 指令。同样,这会导致 IVT
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



