### 动态 - 1 GDB 调试 #### 1. 链路定位 * 在整册链路中的位置:让程序实际跑起来观察状态,补静态分析的 "可能" 为 "实际"。 * 作用:断点触发瞬间读取寄存器、栈、堆,定位真实执行路径。 #### 2. 前置知识 * `ptrace` 系统调用是调试器控制目标进程的通道。 * 软件断点与硬件断点实现差异。 * ASLR 下地址每次运行变化。 #### 3. 技术原理 * 软件断点:把目标地址指令首字节替换为 `0xcc`(`int3` 陷入调试异常),命中后恢复原字节单步再重新写入。可设数量不限,但会改写该处代码字节,自校验会发现。硬件断点:写入调试寄存器 `DR0~DR3` 记录地址与触发类型,由 CPU 比较触发,不改代码,但数量仅 4 个。`attach` 经 `ptrace(PTRACE_ATTACH)` 接管运行中进程。 * 软件断点插入点在指令流字节层:调试器把目标地址指令首字节读出保存替换为 `0xcc`。CPU 执行到该字节触发 `#BP` 异常,内核把信号交给被 `ptrace` 跟踪的调试器。调试器恢复原字节