在gdb中,如何判断我是处于ARM模式还是拇指模式?

在gdb中,如何判断我是处于ARM模式还是拇指模式?,gdb,arm,thumb,Gdb,Arm,Thumb,在用GDB调试ARMv7二进制文件时,除了查看指令长度外,是否有办法确定CPU当前处于哪种模式?(ARM,Thumb)我正在使用这个小gdb脚本从CPSR字段确定当前状态,只需将它放在~/.gdbinit文件中,并在需要时调用ARM_isa define arm_isa if ($cpsr & 0x20) printf "Using THUMB(2) ISA\n" else printf "Using ARM ISA\n" end end 它检查cpsr中的

在用GDB调试ARMv7二进制文件时,除了查看指令长度外,是否有办法确定CPU当前处于哪种模式?(ARM,Thumb)

我正在使用这个小gdb脚本从CPSR字段确定当前状态,只需将它放在~/.gdbinit文件中,并在需要时调用ARM_isa

define arm_isa
  if ($cpsr & 0x20)
    printf "Using THUMB(2) ISA\n"
  else
    printf "Using ARM ISA\n"
  end
end

它检查cpsr中的第5位,它指示当前状态并输出使用的ISA。

这在我在GDB 8.2上的实验中起作用,但我想知道GDB从哪里获得信息,因为DDI0487 da说
cpsr[5]
res0
,并且您应该从
SPSR[5]
读取
PSTATE.p
,而且SPSR似乎无法从用户模式访问。请记住,这个答案来自2014年,参考ARMv7,您链接到的文档是针对ARMv8的。PSTATE仅在ARMv8中引入,并采用了一些以前的CPSR位。是的,我理解。这仍然有效,这很好:-)