Chinaunix

标题: 请教系统调用,CPU上下文保存的问题(64位),不胜感激 [打印本页]

作者: looper0001    时间: 2016-04-08 22:32
标题: 请教系统调用,CPU上下文保存的问题(64位),不胜感激
最近在分析一个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;





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2