Removing breakpoints by function name with rmbfn()

This commit is contained in:
2025-03-12 14:49:07 +01:00
parent 3f57ff1bfe
commit e1c9305407
3 changed files with 31 additions and 0 deletions

View File

@@ -11,6 +11,7 @@ var offset = "0x0000000000001169"; // dupa(), objdump -d ./test
// pplo(); // pplo();
// baddr(offset); // baddr(offset);
bfn("dupa"); bfn("dupa");
// rmbfn("dupa");
lsbrk(); lsbrk();
lsf(); lsf();

View File

@@ -11,6 +11,7 @@ var offset = "@DUPA_ADDR"; // dupa(), objdump -d ./test
// pplo(); // pplo();
// baddr(offset); // baddr(offset);
bfn("dupa"); bfn("dupa");
// rmbfn("dupa");
lsbrk(); lsbrk();
lsf(); lsf();

View File

@@ -354,11 +354,39 @@ void dbg_js_bfn(js_State *js)
Brk brk = { .pid = dbg->pid, .addr = addr }; Brk brk = { .pid = dbg->pid, .addr = addr };
brk_enable(&brk); brk_enable(&brk);
hashtable_set(&dbg->brks, addr_str2, &brk, sizeof(brk)); hashtable_set(&dbg->brks, addr_str2, &brk, sizeof(brk));
break;
} }
} }
js_pushundefined(js); 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) void dbg_js_rmbaddr(js_State *js)
{ {
Dbg *dbg = getdbg(); 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(help, 0, "Print help information, ARGS=None");
make_js_func(lsf, 0, "List functions in executable, 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(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 #undef make_js_func
} }