免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1263 | 回复: 0

[中断] 请教一个关于系统调用,现场保护的问题(64位),不胜感激 [复制链接]

论坛徽章:
0
发表于 2016-04-08 22:04 |显示全部楼层
本帖最后由 looper0001 于 2016-04-08 22:23 编辑

最近在分析一个coredump的问题,但是由于core不完整,导致无法直观的看到案发现场的调用栈,只能通过栈桢结构反推。

但是,由于注册了信号捕获函数core_handler。

也就是,coredump发生时,进程捕获到coredump信号(如:11信号,07信号等),需要先保护现场(寄存器等信息)

之后再通过系统调用,进入信号处理函数core_handler。


但是查了很多资料,没有明确找到,系统调用时的现场保护,压栈了哪些内容?压栈顺序是怎么样的?

在系统调用这一栈桢看到的内容,环境是x64 suse11的:
gdb查看rsp往上的 22 * 8字节内容,但是不知道前面 5 * 8字节保存的是什么内容?

x /22xg $rsp

?
?
?
?
?
r8寄存器
r9寄存器  
r10寄存器  
r11寄存器  
r12寄存器  
r13寄存器  
r14寄存器  
r15寄存器  
rbp寄存器  
rdi寄存器  
rsi寄存器  
rdx寄存器  
rbx寄存器  
rcx寄存器  
rax寄存器  
rsp寄存器  
rip寄存器  




有看到关于SAVE_ALL宏的介绍,但是这个应该是32位系统的,对于64位系统应该不一样的吧?

#define SAVE_ALL \
        cld; \
        pushl %es; \
        pushl %ds; \
        pushl %eax; \
        pushl %ebp; \
        pushl %edi; \
        pushl %esi; \
        pushl %edx; \
        pushl %ecx; \
        pushl %ebx; \
        movl $(__USER_DS), %edx; \
        movl %edx, %ds; \
        movl %edx, %es;

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP