我有类似问题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机器上工作。
答案 0 :(得分:1)
ARM中不存在ESP。它是MSP(主堆栈指针)或PSP(堆栈指针)。
由于ESP不存在,这就是你获得无效演员的原因。如果使用另一个有效的ARM寄存器执行相同的命令,则不会出现错误