Skip to content

Commit de7e510

Browse files
ucgJheucgJhe
authored andcommitted
add feature: setting register value in qdb
1 parent 30046d8 commit de7e510

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

qiling/debugger/qdb/qdb.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -323,6 +323,7 @@ def do_disassemble(self, address: Optional[int] = None) -> None:
323323
qdb_print(QDB_MSG.ERROR)
324324

325325
def do_examine(self, line: str) -> None:
326+
326327
"""
327328
Examine memory: x/FMT ADDRESS.
328329
format letter: o(octal), x(hex), d(decimal), u(unsigned decimal), t(binary), f(float), a(address), i(instruction), c(char), s(string) and z(hex, zero padded on the left)
@@ -332,6 +333,29 @@ def do_examine(self, line: str) -> None:
332333

333334
if type(err_msg := self.mm.parse(line)) is str:
334335
qdb_print(QDB_MSG.ERROR, err_msg)
336+
337+
338+
def do_set(self, line: str) -> None:
339+
"""
340+
set register value of current context
341+
"""
342+
# set $a = b
343+
344+
reg, val = line.split("=")
345+
reg_name = reg.strip().strip("$")
346+
reg_val = try_read_int(val.strip())
347+
348+
if reg_name in self.ql.arch.regs.save().keys():
349+
if reg_val:
350+
setattr(self.ql.arch.regs, reg_name, reg_val)
351+
self.do_context()
352+
qdb_print(QDB_MSG.INFO, f"set register {reg_name} to 0x{reg_val:08x}")
353+
354+
else:
355+
qdb_print(QDB_MSG.ERROR, f"error parsing input: {reg_val} as integer value")
356+
357+
else:
358+
qdb_print(QDB_MSG.ERROR, f"invalid register: {reg_name}")
335359

336360
def do_start(self, *args) -> None:
337361
"""

0 commit comments

Comments
 (0)