From e1c93054071b28a1b76ed7efaad6174fd2b15404 Mon Sep 17 00:00:00 2001 From: kamil Date: Wed, 12 Mar 2025 14:49:07 +0100 Subject: [PATCH] Removing breakpoints by function name with rmbfn() --- .debugusrc1.js | 1 + .debugusrc1.js.txt | 1 + debugus.c | 29 +++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/.debugusrc1.js b/.debugusrc1.js index 24d9373..133da86 100644 --- a/.debugusrc1.js +++ b/.debugusrc1.js @@ -11,6 +11,7 @@ var offset = "0x0000000000001169"; // dupa(), objdump -d ./test // pplo(); // baddr(offset); bfn("dupa"); +// rmbfn("dupa"); lsbrk(); lsf(); diff --git a/.debugusrc1.js.txt b/.debugusrc1.js.txt index 243501b..4a1ca8f 100644 --- a/.debugusrc1.js.txt +++ b/.debugusrc1.js.txt @@ -11,6 +11,7 @@ var offset = "@DUPA_ADDR"; // dupa(), objdump -d ./test // pplo(); // baddr(offset); bfn("dupa"); +// rmbfn("dupa"); lsbrk(); lsf(); diff --git a/debugus.c b/debugus.c index b8fa992..93d5b3b 100644 --- a/debugus.c +++ b/debugus.c @@ -354,11 +354,39 @@ void dbg_js_bfn(js_State *js) Brk brk = { .pid = dbg->pid, .addr = addr }; brk_enable(&brk); hashtable_set(&dbg->brks, addr_str2, &brk, sizeof(brk)); + break; } } js_pushundefined(js); } +void dbg_js_rmbfn(js_State *js) +{ + Dbg *dbg = getdbg(); + const char *fn_name = js_tostring(js, 1); + + for (int i = 0; i < dbg->symbols.count; i++) { + Symbol *s = &dbg->symbols.items[i]; + if (strcmp(fn_name, s->name) == 0) { + uintptr_t addr = s->addr; + char addr_str2[20]; + snprintf(addr_str2, sizeof(addr_str2), "0x%"PRIxPTR, addr); + + Brk *brk = (Brk *)hashtable_get(&dbg->brks, addr_str2); + if (brk == NULL) { + LOG_ERR("No breakpoint at function: %s\n", fn_name); + goto done; + } + brk_disable(brk); + hashtable_delete(&dbg->brks, addr_str2); + break; + } + } + +done: + js_pushundefined(js); +} + void dbg_js_rmbaddr(js_State *js) { Dbg *dbg = getdbg(); @@ -558,6 +586,7 @@ void dbg_init_js(Dbg *dbg) make_js_func(help, 0, "Print help information, ARGS=None"); make_js_func(lsf, 0, "List functions in executable, ARGS=None"); make_js_func(bfn, 1, "Set breakpoint at function, ARGS=Function name:string"); + make_js_func(rmbfn, 1, "Remove breakpoint at function, ARGS=Function name:string"); #undef make_js_func }