4 #include <sys/ptrace.h>
5 #include <asm/ptrace.h>
9 #if (!defined(PTRACE_PEEKUSER) && defined(PTRACE_PEEKUSR))
10 # define PTRACE_PEEKUSER PTRACE_PEEKUSR
13 #if (!defined(PTRACE_POKEUSER) && defined(PTRACE_POKEUSR))
14 # define PTRACE_POKEUSER PTRACE_POKEUSR
18 get_instruction_pointer(Process *proc) {
19 return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, 4 * PT_PC, 0);
23 set_instruction_pointer(Process *proc, void *addr) {
24 ptrace(PTRACE_POKEUSER, proc->pid, 4 * PT_PC, addr);
28 get_stack_pointer(Process *proc) {
29 return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, 4 * PT_USP, 0);
33 get_return_addr(Process *proc, void *stack_pointer) {
34 return (void *)ptrace(PTRACE_PEEKTEXT, proc->pid, stack_pointer, 0);
38 set_return_addr(Process *proc, void *addr) {
39 ptrace(PTRACE_POKETEXT, proc->pid, proc->stack_pointer, addr);