在 gdb (armv7) 中强制转换无效



我有一个类似的问题,比如这个问题 GDB 损坏的堆栈帧 - 如何调试?,如下所示:

 (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机器上工作。

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

ARM 寄存器

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

最新更新