【问题标题】:Where to view the program counter (PC) and instruction register (IR) in gdb在 gdb 中哪里可以查看程序计数器 (PC) 和指令寄存器 (IR)
【发布时间】:2020-04-10 03:09:15
【问题描述】:

是否可以在gdb中查看当前程序计数器和指令寄存器?这是 ubuntu14 上 gdb 中一个基本 C 程序的输出(添加一个 int 并返回它):

我想我会看到类似pcir 的东西,但它可能是作为其他东西存储的,或者根本没有显示在寄存器中。我在哪里可以看到?

【问题讨论】:

  • RIP = 64 位指令指针。
  • 调试器无法在大多数(或任何)ISA 上查看架构 IR,绝对不能在 x86 上查看。 x86 registers: MBR/MDR and instruction registers。使用disas $pc 查看程序计数器(在本例中为 RIP)指向的指令。

标签: c assembly x86 gdb instruction-set


【解决方案1】:

在 x86 64 位中,看起来就像您从图片中处理的那样,程序计数器是 rip(和 eip 用于 32 位)。 x86 中没有指令寄存器。

在 GDB 中,您可以将程序计数器称为 $pc(与 CPU 无关的通用名称)或 $rip(x86-64 特定名称)。

【讨论】:

  • 出于好奇,为什么x86中没有指令寄存器?我显然对 asm 很陌生,只是想学一点,所以只玩过非常基本的模型。那么指令在 Fetch 周期中是如何被解码的呢?
  • @David542 设计选择。您可以找到关于 here 的更长答案。
猜你喜欢
  • 2013-03-22
  • 2023-03-21
  • 2018-11-11
  • 1970-01-01
  • 2012-06-08
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
相关资源
最近更新 更多