我试图在ARM架构上调试进程核心转储。堆栈参数从堆栈中的错误内存地址读取
这是一个用C编写的电信堆栈软件。这个过程是单线程的。
通过gdb进行的某些调试表明,堆栈参数(局部变量或函数参数)正从正确位置的固定偏移量(8字节)的内存位置读取。
下面是一些调试信息:
(gdb) p localParam_p
$16 = (UInt8 *) 0xbe <Address 0xbe out of bounds>
(gdb) x /16wx &localParam_p
0x7ea5c774: 0x000000be 0x00000010 0x94dc788c 0x00000000
正确(预期)值是存储在一个存储器位置0x7ea5c77c(在上面的输出第三字)
这里0x94dc788c是另一个例子:
(gdb) p localParam2
$18 = 0
(gdb) x /16wx &localParam2
0x7ea5c770: 0x00000000 0x000000be 0x00000010 0x94dc788c
addrLen的预期值是0x10(以上第三个字)。
我可以在堆栈帧中看到与其他本地变量相同的问题。
请帮忙!
Valgrind不能在此系统上使用。
这个过程只在几天的时间内崩溃一次,再现步骤还未知。
我们应该怎样帮助您?代码在哪里?我们不是* espers *,你知道。 – Mints97 2015-02-11 11:05:00
我正在寻找提示/方向,我应该采取进一步调试。 – 2015-02-11 11:17:13
8个字节或8位?但'p localParam_p'打印地址为'0x7ea5c774'的值是正确的,对吗? “localParam_p”指针应该在“0x7ea5c774”的下一个字节处打印值是什么意思? – 2015-02-11 11:19:09