异常时候保存现场的栈和程序中用的栈一样吗?

yangkunhenry 2018-08-01 08:57:02
在遇到HardFault的时候,会保存现场会把寄存器的值压入栈,这里的栈和程序申请的栈区同属一块区域吗?
...全文
460 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly 100% 2018-12-22
  • 打赏
  • 举报
回复
异常使用的一般是中断专用的栈,两套系统并行的
  • 打赏
  • 举报
回复
是一个位置,这里有应用程序出错的信息,调用堆栈,调用参数以及函数返回地址等等所有信息,如果想知道这些,可以看一下Microsoft的技术区的一个牛人写的一本书,好象就windows应用层高级排错什么的,会详细告诉你这些,如果记错了,你就看看windbg的相关使用吧,都是关于出错后对堆栈的查看来排错的
剑之名 2018-08-02
  • 打赏
  • 举报
回复
是同一个堆栈的。
divide_error:
pushl $_do_divide_error
no_error_code:
xchgl %eax,(%esp)
pushl %ebx
pushl %ecx
pushl %edx
pushl %edi
pushl %esi
pushl %ebp
push %ds
push %es
push %fs
pushl $0 # "error code"
lea 44(%esp),%edx
pushl %edx
movl $0x10,%edx
mov %dx,%ds
mov %dx,%es
mov %dx,%fs
call *%eax
这是出错处理的汇编,,寄存器的入栈是在处理函数调用(call)和用户切换(mov $0x10……)之前。

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧