From 31f6fa1cc1baca613d919a3906b31837c1275ec6 Mon Sep 17 00:00:00 2001 From: kamil Date: Mon, 10 Mar 2025 09:38:03 +0100 Subject: [PATCH] Fix breakpoints --- .debugusrc1.js | 2 +- debugus.c | 20 ++++---------------- test.c | 3 +++ 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/.debugusrc1.js b/.debugusrc1.js index 7c6cf25..2ef9bf9 100644 --- a/.debugusrc1.js +++ b/.debugusrc1.js @@ -3,7 +3,7 @@ log_inf("Loading user init script for program ./test"); log_err("Test error message"); -var offset = "0x0000000000001145"; // objdump -d ./test +var offset = "0x0000000000001169"; // dupa(), objdump -d ./test // Testing... print_file(); diff --git a/debugus.c b/debugus.c index 572552d..82d873d 100644 --- a/debugus.c +++ b/debugus.c @@ -145,7 +145,6 @@ typedef struct { js_State *js; HashTable brks; uintptr_t program_load_offset; - bool running; } Dbg; void dbg_wait(Dbg *dbg) @@ -229,16 +228,10 @@ void dbg_step_brk(Dbg *dbg) if ((brk != NULL && brk->enabled)) { uint64_t prev_instr = loc; dbg_set_rip(dbg, prev_instr); - brk->enabled = false; + brk_disable(brk); ptrace(PTRACE_SINGLESTEP, brk->pid, NULL, NULL); dbg_wait(dbg); - brk->enabled = true; - } else { - if (!dbg->running) { - dbg->running = true; - } else { - LOG_ERR("Breakpoint 0x%"PRIxPTR" either doesn't exist or is disabled\n", loc); - } + brk_enable(brk); } } @@ -274,11 +267,6 @@ void dbg_js_rm_brk_addr(js_State *js) { Dbg *dbg = getdbg(); const char *addr_str = js_tostring(js, 1); - /* uintptr_t addr; */ - /* sscanf(addr_str, "0x%"SCNxPTR, &addr); */ - /* uintptr_t full_addr = dbg->program_load_offset + addr; */ - /* char addr_str2[20]; */ - /* snprintf(addr_str2, sizeof(addr_str2), "0x%"PRIxPTR, full_addr); */ Brk *brk = (Brk *)hashtable_get(&dbg->brks, addr_str); if (brk == NULL) { LOG_ERR("No breakpoint at address: %s\n", addr_str); @@ -448,8 +436,8 @@ void dbg_init_load_offset(Dbg *dbg) } // We only need the first one - procmaps_struct *mem_region = pmparser_next(&maps_iter); - + procmaps_struct *mem_region = NULL; + mem_region = pmparser_next(&maps_iter); dbg->program_load_offset = (uintptr_t)mem_region->addr_start; pmparser_free(&maps_iter); diff --git a/test.c b/test.c index b31e67e..2c36ba1 100644 --- a/test.c +++ b/test.c @@ -1,4 +1,5 @@ #include +#include void dupa(void) { printf("KSKSKKSKSKSK\n"); @@ -6,6 +7,8 @@ void dupa(void) { int main(void) { + printf("main at 0x%"PRIxPTR"\n", (uintptr_t)&main); + for (int i = 1; i <= 20; i++) { printf("i = %d\n", i); if (i % 10 == 0) {