有人可以帮我解决这个堆栈跟踪:
Loading modules: [ libumem.so.1 libc.so.1 libuutil.so.1 ld.so.1 ]
> $c
libc.so.1`strlen+0xc(80b37ba, fe679d2c, fe679d00, 0)
libc.so.1`snprintf+0x74(fe67d970, 1388, 80b37b8, efef9f68, 80b379d, fe679e30)
> 80b37ba::whatis
80b37ba is unknown
> fe679d2c::whatis
fe679d2c is unknown
> fe679d00::whatis
fe679d00 is unknown
strlen函数获取一个参数,但在此堆栈跟踪中我看到3个地址?他们是什么意思?
问候
答案 0 :(得分:1)
调试器无法解释大部分内容。
调试器可能不知道函数有多少参数。所以它打印更多。但是你可以忽略额外的参数。
有意义的部分显示snprintf
被调用,然后调用strlen
。这可能是由于格式字符串中的%s
。 strlen
参数与snprintf
的第三个参数相似(不相同,我不知道为什么)。
因此,某些代码可能会执行类似snprintf("%d %s\n", number, string)
的内容
您可以在fe67d970
找到实际的格式字符串,它可能会让您识别谁调用它(除非您在任何地方使用相同的格式字符串)。