请教一个关于系统调用,现场保护的问题(64位),不胜感激
本帖最后由 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;
页:
[1]