diff --git a/.debugusrc1.js b/.debugusrc1.js index ee37bf1..24d9373 100644 --- a/.debugusrc1.js +++ b/.debugusrc1.js @@ -9,7 +9,8 @@ var offset = "0x0000000000001169"; // dupa(), objdump -d ./test // pf(); // ppid(); // pplo(); -baddr(offset); +// baddr(offset); +bfn("dupa"); lsbrk(); lsf(); diff --git a/.debugusrc1.js.txt b/.debugusrc1.js.txt index 9683145..243501b 100644 --- a/.debugusrc1.js.txt +++ b/.debugusrc1.js.txt @@ -9,7 +9,8 @@ var offset = "@DUPA_ADDR"; // dupa(), objdump -d ./test // pf(); // ppid(); // pplo(); -baddr(offset); +// baddr(offset); +bfn("dupa"); lsbrk(); lsf(); diff --git a/debugus.c b/debugus.c index e6eea89..b8fa992 100644 --- a/debugus.c +++ b/debugus.c @@ -338,7 +338,24 @@ void dbg_js_baddr(js_State *js) Brk brk = { .pid = dbg->pid, .addr = dbg->program_load_offset + addr }; brk_enable(&brk); hashtable_set(&dbg->brks, addr_str2, &brk, sizeof(brk)); -done: + js_pushundefined(js); +} + +void dbg_js_bfn(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 = { .pid = dbg->pid, .addr = addr }; + brk_enable(&brk); + hashtable_set(&dbg->brks, addr_str2, &brk, sizeof(brk)); + } + } js_pushundefined(js); } @@ -540,6 +557,7 @@ void dbg_init_js(Dbg *dbg) make_js_func(mwr, 2, "Write memory at address, ARGS=Address:hex string,Value:hex string"); 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"); #undef make_js_func }