📄 registers.c
字号:
/* * Copyright (C) 2004 PathScale, Inc * Copyright (C) 2004 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) * Licensed under the GPL */#include <errno.h>#include "kern_constants.h"#include "longjmp.h"#include "user.h"#include "sysdep/ptrace_user.h"int save_fp_registers(int pid, unsigned long *fp_regs){ if (ptrace(PTRACE_GETFPREGS, pid, 0, fp_regs) < 0) return -errno; return 0;}int restore_fp_registers(int pid, unsigned long *fp_regs){ if (ptrace(PTRACE_SETFPREGS, pid, 0, fp_regs) < 0) return -errno; return 0;}int save_fpx_registers(int pid, unsigned long *fp_regs){ if (ptrace(PTRACE_GETFPXREGS, pid, 0, fp_regs) < 0) return -errno; return 0;}int restore_fpx_registers(int pid, unsigned long *fp_regs){ if (ptrace(PTRACE_SETFPXREGS, pid, 0, fp_regs) < 0) return -errno; return 0;}unsigned long get_thread_reg(int reg, jmp_buf *buf){ switch (reg) { case EIP: return buf[0]->__eip; case UESP: return buf[0]->__esp; case EBP: return buf[0]->__ebp; default: printk(UM_KERN_ERR "get_thread_regs - unknown register %d\n", reg); return 0; }}int have_fpx_regs = 1;void arch_init_registers(int pid){ unsigned long fpx_regs[HOST_XFP_SIZE]; int err; err = ptrace(PTRACE_GETFPXREGS, pid, 0, fpx_regs); if(!err) return; if(errno != EIO) panic("check_ptrace : PTRACE_GETFPXREGS failed, errno = %d", errno); have_fpx_regs = 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -