如何识别core-dump中的堆栈是否可靠且局部变量是否保持正确的值

时间:2014-05-20 06:50:12

标签: stack mips core

此查询通常用于验证堆栈的验证。下面是一个问题的例子,它可能有助于提供一些想法。

我正在处理 MIPS核心转储,其部分堆栈跟踪位于下方。

#2  0x7772027c in __assert13 (file=<optimized out>, line=<optimized out>, function=<optimized out>, failedexpr=<optimized out>) at /work.local/build/toolSpaces/tools01/E9-3-0/SW-NetBSD5/usr/src/lib/libc_r/../libc/gen/assert.c:61
#3  0x773baf3c in f10IpcSendWait (key=0x8f08, payload=0x76d9e318 "", len=0x274, tmout=0x3c, type=0xaf1, transaction=0xc0f) at f10IpcLib.c:2412
#4  0x77391d04 in cfgIpcSendWait (pkey=<optimized out>, cmdType=0x69, data=0x76d9e7a0, len=0x224, retStatus=<optimized out>) at f10CfgLib.c:751
#5  0x77391fc0 in f10CfgGetExact (pkey=0x1, usrData=0x784bb040) at f10CfgLib.c:554
#6  0x1002785c in f10GetBanner (pKey=0x8f08, bannerType=<optimized out>, sessionType=<optimized out>, sessionId=<optimized out>, bannerString=0x77b33000 <Address 0x77b33000 out of bounds>) at pamBannerHandler.c:123
#7  0x10040e40 in sshGetAuthBanner (banner=0x77b33000 <Address 0x77b33000 out of bounds>) at sshPamUtils.c:74
#8  0x10015b80 in userauth_banner () at auth2.c:176
#9  input_userauth_request (type=<optimized out>, seq=<optimized out>, ctxt=<optimized out>) at auth2.c:303
#10 0x76edbea0 in dispatch_run (mode=0x0, done=0x784bbb40, ctxt=0x784bb040) at dispatch.c:98

此处 userauth_banner ()使用参数 0x77b33000 调用 sshGetAuthBanner ()。但是,当我查看userauth_banner()的局部变量 banner 时,它显示了我绝对不同的值。

(gdb) p banner 
$20 = 0x1 <Address 0x1 out of bounds>

我知道RISC参数可以在堆栈上传递 - 但我不能得到的是GDB如何将参数显示为0x77b33000。我猜这是在 sshGetAuthBanner ()之后调用的其他函数的参数或者是其他一些计算或操作的结果。

userauth_banner(void)
{               
        char *banner = NULL;
            if ((banner = (char *)xcalloc(2, 25600)) == NULL)
                goto done;
        sshGetAuthBanner(banner);
        if (!strlen(banner))
            goto done;

所以,在我想要了解的所有内容中,我们应该寻找什么,以确定堆栈是否正确。而且,在上面讨论的情况下哪个值更可靠以及为什么。

任何指针都会有所帮助。

0 个答案:

没有答案