c - 打印堆栈指针与 backtrace() 打印输出

标签 c linux stack

我按照 this post 中的描述打印了当前堆栈指针

void myFunc1(void)
{
    char *p;
    char b=0x11;
    p = &b;
    printf("printStack(1) [%p]=%d\n",p,*p);
    myfunc2();

}

输出:

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 存在差异呢?

架构:ARM

谢谢

最佳答案

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

关于c - 打印堆栈指针与 backtrace() 打印输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43760261/

相关文章:

linux - 在将设置脚本从 CURL 传输到 BASH 时保留颜色

c - 在c中初始化数组,格式为 `int a[3]={0,};`

c++ - 为什么我的 std::string 被转换为 std::basic_string<char>?

architecture - 为什么堆栈通常向下增长?

java - 什么是 C/C++ 等同于 Java 的异步任务

C 复制到 const char *

c - 将 NULL 分配给二叉树中的子节点时出现段错误

c - realloc 不复制第一个索引

linux - 在 Linux 中执行线程程序

c# - 如何从 RichTextBox 控件的撤消堆栈中删除操作?