阅读 How debuggers work: Part 2 - Breakpoints 总结

调试器有两个基石:1. 断点  2. 访问被调试程序的内存

 

Software interrupts

中断:为了处理异步事件(比如 IO 和 时钟)

硬件中断:包含1. 一个专用的电子信号 2. 一个特别的“反应电路”会回应这个电子信号。当电路检测到这个电子信号,就会停下CPU,保存它的状态,接着跳入一个预先定义好的地址去调用一个handler来处理这个中断,在Handler处理好后,CPU再从上次停止的地方恢复执行。

软件中断:CPU支持一些特别的指令,这些指令会让软件模拟中断。当软件执行了一个这样的特别的指令后,CPU会把这个指令当成一个中断,停止执行,保存状态,并跳入对应的handler。这就叫做"trap"(陷入),这允许了现代操作系统的许多奇迹。

今天,许多异常已经很难说是硬件中断还是软件中断了。

 

int 3 in theory

int 指令是用来启动“陷入”,也就是软件中断的。在x86中,前32个中断号被CPU保留,其中int 3叫做 “trap to debugger"。

根据intel手册,int 3 产生一个特殊的单字节操作码(CC),这个操作码会调用一个 debug exception handler

(没看完)

 

int 3 in practice

一旦一个进程执行了 int 3 指令,操作系统就会暂停这个进程。在Linux中就是向这个进程发送SIGTRAP信号。

(想看懂似乎需要看part 1,先看part1吧)

 

 

原文:https://eli.thegreenplace.net/2011/01/27/how-debuggers-work-part-2-breakpoints

posted @ 2022-08-03 13:21  yinhuachen  阅读(55)  评论(0编辑  收藏  举报