regs.c revision 3219f320604810532a4938dda8f9dfadb0e840f3
1#if HAVE_CONFIG_H 2#include "config.h" 3#endif 4 5#include <sys/types.h> 6#include <sys/ptrace.h> 7#include <asm/ptrace.h> 8 9#include "ltrace.h" 10 11#if (!defined(PTRACE_PEEKUSER) && defined(PTRACE_PEEKUSR)) 12# define PTRACE_PEEKUSER PTRACE_PEEKUSR 13#endif 14 15#if (!defined(PTRACE_POKEUSER) && defined(PTRACE_POKEUSR)) 16# define PTRACE_POKEUSER PTRACE_POKEUSR 17#endif 18 19void *get_instruction_pointer(struct process *proc) 20{ 21 return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, 64 /* REG_PC */ , 0); 22} 23 24void set_instruction_pointer(struct process *proc, void *addr) 25{ 26 ptrace(PTRACE_POKEUSER, proc->pid, 64 /* REG_PC */ , addr); 27} 28 29void *get_stack_pointer(struct process *proc) 30{ 31 return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, 30 /* REG_FP */ , 0); 32} 33 34void *get_return_addr(struct process *proc, void *stack_pointer) 35{ 36 return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, 26 /* RA */ , 0); 37} 38