From 3650929fa01a9f4b31815e54b5ec5cb7f681a1fa Mon Sep 17 00:00:00 2001 From: hellerve Date: Fri, 15 Sep 2017 14:41:21 +0200 Subject: [PATCH] breakpoint: refactored to own file --- src/breakpoint.c | 29 +++++++++++++++++++++++++++++ src/breakpoint.h | 28 ++++++++++++++++++++++++++++ src/debugger.c | 27 --------------------------- src/debugger.h | 21 +-------------------- 4 files changed, 58 insertions(+), 47 deletions(-) create mode 100644 src/breakpoint.c create mode 100644 src/breakpoint.h diff --git a/src/breakpoint.c b/src/breakpoint.c new file mode 100644 index 0000000..96191db --- /dev/null +++ b/src/breakpoint.c @@ -0,0 +1,29 @@ +#include "breakpoint.h" + +breakpoint* new_breakpoint(pid_t pid, void* addr) { + breakpoint* b = malloc(sizeof(breakpoint)); + b->pid = pid; + b->addr = addr; + b->enabled = 0; + b->data = 0; + return b; +} + +void enable(breakpoint* b) { + long data = ptrace(PTRACE_PEEKDATA, b->pid, b->addr, 0); + b->data = data & 0xff; + uint64_t int3 = 0xcc; + uint64_t data_with_int3 = ((data & ~0xff) | int3); + ptrace(PTRACE_POKEDATA, b->pid, b->addr, data_with_int3); + + b->enabled = 1; +} + +void disable(breakpoint* b) { + long data = ptrace(PTRACE_PEEKDATA, b->pid, b->addr, 0); + long restored = ((data & ~0xff) | b->data); + ptrace(PTRACE_POKEDATA, b->pid, b->addr, restored); + + b->enabled = 0; +} + diff --git a/src/breakpoint.h b/src/breakpoint.h new file mode 100644 index 0000000..c7b58f5 --- /dev/null +++ b/src/breakpoint.h @@ -0,0 +1,28 @@ +#include +#include +#include + +/* has to come here because of caddr_t on OS X */ +#include + +#include +#include + +#ifdef __APPLE__ +#define PTRACE_TRACEME PT_TRACE_ME +#define PTRACE_CONT PT_CONTINUE +#define PTRACE_PEEKDATA PT_READ_D +#define PTRACE_POKEDATA PT_WRITE_D +#else +#endif + +typedef struct { + short enabled; + uint8_t data; + pid_t pid; + void* addr; +} breakpoint; + +breakpoint* new_breakpoint(pid_t, void*); +void enable(breakpoint*); +void disable(breakpoint*); diff --git a/src/debugger.c b/src/debugger.c index ec7dabb..1109854 100644 --- a/src/debugger.c +++ b/src/debugger.c @@ -8,39 +8,12 @@ debugger* new_debugger(pid_t pid) { return d; } -breakpoint* new_breakpoint(pid_t pid, void* addr) { - breakpoint* b = malloc(sizeof(breakpoint)); - b->pid = pid; - b->addr = addr; - b->enabled = 0; - b->data = 0; - return b; -} - void free_debugger(debugger* d) { int i; for (i = 0; i < d->n_breakpoints; i++) free(d->breakpoints[i]); free(d); } -void enable(breakpoint* b) { - long data = ptrace(PTRACE_PEEKDATA, b->pid, b->addr, 0); - b->data = data & 0xff; - uint64_t int3 = 0xcc; - uint64_t data_with_int3 = ((data & ~0xff) | int3); - ptrace(PTRACE_POKEDATA, b->pid, b->addr, data_with_int3); - - b->enabled = 1; -} - -void disable(breakpoint* b) { - long data = ptrace(PTRACE_PEEKDATA, b->pid, b->addr, 0); - long restored = ((data & ~0xff) | b->data); - ptrace(PTRACE_POKEDATA, b->pid, b->addr, restored); - - b->enabled = 0; -} - void set_breakpoint(debugger* d, void* addr) { printf("Setting breakpoint at addres %p\n", addr); breakpoint* b = new_breakpoint(d->pid, addr); diff --git a/src/debugger.h b/src/debugger.h index 8f3fa7e..fb98079 100644 --- a/src/debugger.h +++ b/src/debugger.h @@ -1,27 +1,8 @@ -#include -#include - #include -#include -#include +#include "breakpoint.h" #include "util.h" -#ifdef __APPLE__ -#define PTRACE_TRACEME PT_TRACE_ME -#define PTRACE_CONT PT_CONTINUE -#define PTRACE_PEEKDATA PT_READ_D -#define PTRACE_POKEDATA PT_WRITE_D -#else -#endif - -typedef struct { - short enabled; - uint8_t data; - pid_t pid; - void* addr; -} breakpoint; - typedef struct { breakpoint** breakpoints; int n_breakpoints;