Removing breakpoints by function name with rmbfn()
This commit is contained in:
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
29
debugus.c
29
debugus.c
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user