12813126eSlogin #ifndef __PTRACE_H__ 22813126eSlogin 32813126eSlogin #define __PTRACE_H__ 42813126eSlogin 52813126eSlogin struct pt_regs 62813126eSlogin { 72813126eSlogin unsigned long r15; 82813126eSlogin unsigned long r14; 92813126eSlogin unsigned long r13; 102813126eSlogin unsigned long r12; 112813126eSlogin unsigned long r11; 122813126eSlogin unsigned long r10; 132813126eSlogin unsigned long r9; 142813126eSlogin unsigned long r8; 152813126eSlogin unsigned long rbx; 162813126eSlogin unsigned long rcx; 172813126eSlogin unsigned long rdx; 182813126eSlogin unsigned long rsi; 192813126eSlogin unsigned long rdi; 202813126eSlogin unsigned long rbp; 212813126eSlogin unsigned long ds; 222813126eSlogin unsigned long es; 232813126eSlogin unsigned long rax; 242813126eSlogin unsigned long func; 252813126eSlogin unsigned long errcode; 262813126eSlogin unsigned long rip; 272813126eSlogin unsigned long cs; 282813126eSlogin unsigned long rflags; 292813126eSlogin unsigned long rsp; 302813126eSlogin unsigned long ss; 312813126eSlogin }; 32*1a2eaa40Slogin 33*1a2eaa40Slogin /** 34*1a2eaa40Slogin * @brief 判断pt_regs是否来自用户态 35*1a2eaa40Slogin * 36*1a2eaa40Slogin * @param regs 37*1a2eaa40Slogin * @return __always_inline 38*1a2eaa40Slogin */ user_mode(struct pt_regs * regs)39*1a2eaa40Sloginstatic inline int user_mode(struct pt_regs *regs) 40*1a2eaa40Slogin { 41*1a2eaa40Slogin return !!(regs->cs & 3); 42*1a2eaa40Slogin } 432813126eSlogin 442813126eSlogin #endif 45