gdb中的无效转换(armv7)

时间:2018-01-19 09:25:30

标签: c++ debugging arm gdb

我有类似问题GDB corrupted stack frame - How to debug?,如下所示:

 (gdb) bt
 #0  0x76bd6978 in fputs () from /lib/libc.so.6
 #1  0x0000b080 in getfunction1 ()
 #2  0x0000b080 in getfunction1 ()
 Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Chris Dodd写了一个答案,将堆栈的顶部指向程序计数器(PC)。在32位机器中它应该是

(gdb) set $pc = *(void **)$esp
(gdb) set $esp = $esp + 4

但是,在运行第一行后,我得到了invalid cast

(gdb) set $pc = *(void **)$esp
Invalid cast.
(gdb) set $esp = $esp + 4
Argument to arithmetic operation not a number or boolean.

为什么我会收到此消息?以及如何解决崩溃发生的位置?我在使用Linux的armv7机器上工作。

1 个答案:

答案 0 :(得分:1)

ARM中不存在ESP。它是MSP(主堆栈指针)或PSP(堆栈指针)。

ARM Registers

由于ESP不存在,这就是你获得无效演员的原因。如果使用另一个有效的ARM寄存器执行相同的命令,则不会出现错误