【问题标题】:GDB does not step correctlyGDB 没有正确步进
【发布时间】:2018-09-30 09:19:11
【问题描述】:

为什么 GDB 不转到下一条机器指令。在下面的 gif 中,我将程序计数器设置为指向开始 (0x100020),其中包含 cli 指令。但是,当我输入(gdb) stepi 时,GDB 不会转到下一条指令,即 (0x100021) mov $0x104000,%esp,而是跳转到 (0x100023)。

无论我从哪条指令开始,GDB 都不会跳转到下一条逻辑指令,而是跳转到看似任意的位置。这是为什么呢?

【问题讨论】:

  • 试试命令nexti
  • @Sergio,同样的任意跳转问题。此外,我需要stepi 工作,因为他们希望在执行时遵循所有指令。

标签: assembly x86 gdb elf


【解决方案1】:

WSL(目前)不提供 32 位 ELF 支持。

请参阅following StackOverfow question

原来是 WSL 的问题,我的 elf 文件是 32 位的。


编辑

虽然上述情况属实,但如果您使用 QEMU,则可以在 WSL 中通过 GDB 进行 32 位 elf 调试。在我的例子中,GDB 的行为与上面一样不是因为它是 32 位的(因为我通过 QEMU 运行 elf 文件),而是因为我的汇编程序生成的代码没有产生 GDB 理解的调试信息。我使用的是NASM,并且需要-F dwarf-g 标志来生成所述调试信息。

【讨论】:

  • GDB 不需要stepi / nexti 的调试信息。是否被错误调试信息弄糊涂了?看起来您使用的是layout reglayout asm(所以您看到的是反汇编窗口,而不是源窗口)。我担心的是cli 是否会阻止调试中断触发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 2011-08-21
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多