GDB:直到命令停止在哪里?
Posted
技术标签:
【中文标题】GDB:直到命令停止在哪里?【英文标题】:GDB: until command stops where? 【发布时间】:2020-03-10 19:16:00 【问题描述】:在gdb和disas命令中运行程序后:
0x0000555555556692 <+0>: sub $0x18,%rsp
0x0000555555556696 <+4>: mov %0x28,%rax
0x00005555555566da <+13>: jmpq *%rax
如果我使用
(gdb) until *0x000055555555669f
第 行,是执行第 13 行然后停止还是只执行第 4 行然后停止?
【问题讨论】:
你试过了吗?print /x $pc
显示什么?这将告诉您 JMP 是否已经执行并更新了程序计数器 (RIP)。使用 RAX 中的有效地址进行测试也许也很有用,因此从新 RIP 中提取代码不会出错。另外,你确定这是真正的输出吗? 0x...696
到 0x...6da
的地址间隔超过 9 个字节,mov %0x28,%rax
不是有效的 AT&T 语法。 $0x28
mov-immediate 将是 7 或 10 个字节长,而不是 9,除非您以某种方式使用冗余前缀手动编码符号扩展 imm32 版本。
是的,你是对的。那不是真正的输出。我只是为了这个问题而编造地址。我试过了,看起来直到 [在此处输入地址] 命令不会执行地址处的语句。参数中指定。它只会执行它之前的语句,所以只有。如果我错了,请纠正我。
等一下,你的问题声称0x000055555555669f
是<+13>
行,但它在假反汇编中有不同的地址。如果您要编造一些东西,或者更好地构建一个真实的测试用例并组装它,至少让您的问题自洽,然后复制/粘贴 GDB 输出。 (包括您尝试时发生的事情)。起初我没有注意到该文本,并认为您在询问until
地址位于指令中间某处或分支目标之类的情况。
【参考方案1】:
gdb 在执行中断的指令之前总是会中断。
【讨论】:
以上是关于GDB:直到命令停止在哪里?的主要内容,如果未能解决你的问题,请参考以下文章