-1
我打印当前堆栈指针如在this post打印堆栈指针VS回溯()打印输出
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]
我预计这两个打印输出中的地址都是相同的s步调地址。 那么为什么地址0x7ec8a72f与0x2aba4378有差异呢?
拱门:ARM
感谢
你正在执行'printf()'和'backtrace'调用吗? – filaton
为什么函数的可执行代码位于当前正在运行的线程的堆栈上? –
这两个调用('printf()'和'backtrace')在相同的程序执行中完成。 @AndrewHenle - 你的意思是stacktrac打印的地址是数据段地址吗? – joni