Setting registers

This commit is contained in:
kamkow1
2025-03-09 20:16:13 +01:00
parent 4303a5d27f
commit cc14cab9b5
2 changed files with 24 additions and 3 deletions

View File

@@ -11,5 +11,13 @@ print_pid();
print_program_load_offset(); print_program_load_offset();
mk_brk_addr(main_offset); mk_brk_addr(main_offset);
list_brks(); 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(); dump_regs();
cont(); cont();

View File

@@ -202,7 +202,7 @@ void dbg_js_mk_brk_addr(js_State *js)
Dbg *dbg = getdbg(); Dbg *dbg = getdbg();
const char *addr_str = js_tostring(js, 1); const char *addr_str = js_tostring(js, 1);
uintptr_t addr; 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 brk = { .pid = dbg->pid, .addr = dbg->program_load_offset + addr };
brk_enable(&brk); brk_enable(&brk);
hashtable_set(&dbg->brks, addr_str, &brk, sizeof(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(); Dbg *dbg = getdbg();
const char *addr_str = js_tostring(js, 1); const char *addr_str = js_tostring(js, 1);
uintptr_t addr; uintptr_t addr;
sscanf(addr_str, "%"SCNxPTR, &addr); sscanf(addr_str, "0x%"SCNxPTR, &addr);
dbg->program_load_offset = addr; dbg->program_load_offset = addr;
js_pushundefined(js); js_pushundefined(js);
@@ -304,6 +304,18 @@ void dbg_js_get_reg(js_State *js)
js_pushstring(js, buf); 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) void dbg_init_js(Dbg *dbg)
{ {
dbg->js = js_newstate(NULL, NULL, JS_STRICT); 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_file, 0);
make_js_func(get_pid, 0); make_js_func(get_pid, 0);
make_js_func(get_program_load_offset, 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 #undef make_js_func
} }