#if HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "ltrace.h" #if (!defined(PTRACE_PEEKUSER) && defined(PTRACE_PEEKUSR)) # define PTRACE_PEEKUSER PTRACE_PEEKUSR #endif #if (!defined(PTRACE_POKEUSER) && defined(PTRACE_POKEUSR)) # define PTRACE_POKEUSER PTRACE_POKEUSR #endif void * get_instruction_pointer(struct process * proc) { return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, 4*EIP, 0); } void set_instruction_pointer(struct process * proc, void * addr) { ptrace(PTRACE_POKEUSER, proc->pid, 4*EIP, (long)addr); } void * get_stack_pointer(struct process * proc) { return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, 4*UESP, 0); } void * get_return_addr(struct process * proc, void * stack_pointer) { return (void *)ptrace(PTRACE_PEEKTEXT, proc->pid, stack_pointer, 0); }