diff --git a/.debugusrc1.js b/.debugusrc1.js index 04b2b37..90e6e68 100644 --- a/.debugusrc1.js +++ b/.debugusrc1.js @@ -11,5 +11,13 @@ print_pid(); print_program_load_offset(); mk_brk_addr(main_offset); list_brks(); +log_inf("1 --------------------------------------------"); +dump_regs(); +var r14 = get_reg("r14"); +set_reg("r14", "0x0"); +log_inf("2 --------------------------------------------"); +dump_regs(); +set_reg("r14", r14); +log_inf("3 --------------------------------------------"); dump_regs(); cont(); diff --git a/debugus.c b/debugus.c index 89ac129..8b35a9e 100644 --- a/debugus.c +++ b/debugus.c @@ -202,7 +202,7 @@ void dbg_js_mk_brk_addr(js_State *js) Dbg *dbg = getdbg(); const char *addr_str = js_tostring(js, 1); uintptr_t addr; - sscanf(addr_str, "%"SCNxPTR, &addr); + sscanf(addr_str, "0x%"SCNxPTR, &addr); Brk brk = { .pid = dbg->pid, .addr = dbg->program_load_offset + addr }; brk_enable(&brk); hashtable_set(&dbg->brks, addr_str, &brk, sizeof(brk)); @@ -230,7 +230,7 @@ void dbg_js_set_program_load_offset(js_State *js) Dbg *dbg = getdbg(); const char *addr_str = js_tostring(js, 1); uintptr_t addr; - sscanf(addr_str, "%"SCNxPTR, &addr); + sscanf(addr_str, "0x%"SCNxPTR, &addr); dbg->program_load_offset = addr; js_pushundefined(js); @@ -304,6 +304,18 @@ void dbg_js_get_reg(js_State *js) js_pushstring(js, buf); } +void dbg_js_set_reg(js_State *js) +{ + Dbg *dbg = getdbg(); + const char *name = js_tostring(js, 1); + Register r = get_reg_from_name(name); + const char *value_str = js_tostring(js, 2); + uint64_t value; + sscanf(value_str, "0x%"SCNx64, &value); + set_reg_value(dbg->pid, r, value); + js_pushundefined(js); +} + void dbg_init_js(Dbg *dbg) { dbg->js = js_newstate(NULL, NULL, JS_STRICT); @@ -325,7 +337,8 @@ void dbg_init_js(Dbg *dbg) make_js_func(get_file, 0); make_js_func(get_pid, 0); make_js_func(get_program_load_offset, 0); - make_js_func(get_reg, 1); + make_js_func(get_reg, 1 /*reg name*/); + make_js_func(set_reg, 2 /* reg name, value*/); #undef make_js_func }