打印堆栈指针vs backtrace()打印输出

时间:2017-05-03 12:38:12

标签: c linux stack

我打印了this post

中描述的当前堆栈指针
void myFunc1(void)
{
    char *p;
    char b=0x11;
    p = &b;
    printf("printStack(1) [%p]=%d\n",p,*p);
    myfunc2();

}

outout:

printStack(1) [0x7ec8a72f]=17

使用backtrace example中的剪切代码时的打印输出:

backtrace() returned 4 addresses
/home/lib/libmy1.so(myfunc3+0x14) [0x2aba4378]
/home/lib/libmy1.so(myFunc1+0x220) [0x2aba5d74]
/home/my_demon() [0x1b0b8]
/home/my_demon(main+0x8b8) [0x19668]
/lib/libc.so.6(__libc_start_main+0x118) [0x2ac554c4]

我希望两个打印输出中的地址都在同一个空格地址中。 那么为什么地址0x7ec8a72f与0x2aba4378之间存在差异?

Arch:ARM

由于

1 个答案:

答案 0 :(得分:0)

正如评论中提到的(由Andrew Henle和Ian Abbott提供)。 printf输出是内存中堆栈位置的地址,而backtrace打印存储在堆栈中的被调用函数的返回地址。 感谢