如何设置确切的指令`gdb`放置断点?
How to set exact instruction `gdb` puts a breakpoint on?
给出这样的代码(假设行号是 x
):
if (condition) return false;
...如果 b x
用于在该行设置断点,它将在条件评估时中断。如何指示 gdb
将断点 放在同一行但不同的指令 ?在我的例子中,目标是 return false
.
How do I
您可以使用 b *0x1234
语法在您想要的任何指令上设置断点。示例:
(gdb) disas $pc
Dump of assembler code for function main:
=> 0x0000555555555040 <+0>: xor %eax,%eax
0x0000555555555042 <+2>: cmp [=10=]x1,%edi
0x0000555555555045 <+5>: setg %al
0x0000555555555048 <+8>: retq
End of assembler dump.
(gdb) b *0x0000555555555045
Breakpoint 2 at 0x555555555045
(gdb) c
Continuing.
Breakpoint 2, 0x0000555555555045 in main ()
(gdb) x/i $pc
=> 0x555555555045 <main+5>: setg %al
给出这样的代码(假设行号是 x
):
if (condition) return false;
...如果 b x
用于在该行设置断点,它将在条件评估时中断。如何指示 gdb
将断点 放在同一行但不同的指令 ?在我的例子中,目标是 return false
.
How do I
您可以使用 b *0x1234
语法在您想要的任何指令上设置断点。示例:
(gdb) disas $pc
Dump of assembler code for function main:
=> 0x0000555555555040 <+0>: xor %eax,%eax
0x0000555555555042 <+2>: cmp [=10=]x1,%edi
0x0000555555555045 <+5>: setg %al
0x0000555555555048 <+8>: retq
End of assembler dump.
(gdb) b *0x0000555555555045
Breakpoint 2 at 0x555555555045
(gdb) c
Continuing.
Breakpoint 2, 0x0000555555555045 in main ()
(gdb) x/i $pc
=> 0x555555555045 <main+5>: setg %al