GDB设置断点后未显示int3指令的原因咨询
GDB断点未替换为int3指令的原因
- 你遇到的是GDB的正常行为:GDB默认不会在进程未启动/处于启动前暂停状态时修改目标内存。当你刚启动GDB、反汇编
main并设置断点后,进程还未开始执行,此时GDB仅会记录断点的地址信息,不会立刻将该地址的指令替换为0xcc(int3操作码)。 - 只有当你执行
run命令启动进程,或是进程进入运行状态后被暂停时,GDB才会将断点地址处的原始指令替换为int3。当断点被触发后,GDB会临时把0xcc恢复为原始指令,让你可以正常单步执行或继续运行程序。 - 验证方式:设置断点后执行
run,程序会停在断点位置,此时再查看该地址的字节值,就能看到0xcc;也可以用info breakpoints命令确认断点已被正确注册。 - 额外说明:如果使用硬件断点(比如
break *0x0000555555555171 hw),GDB会借助CPU的调试寄存器实现断点,这种场景下内存中的指令根本不会被修改,但你这里使用的是默认的软件断点,核心原因还是进程未启动导致GDB未写入int3。
内容的提问来源于stack exchange,提问作者Blueha
相关产品推荐
相关产品推荐

