mirror of
https://github.com/idapython/src
synced 2026-06-08 14:47:00 +00:00
54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
"""
|
|
summary: print all registers, for all threads
|
|
|
|
description: iterate over the list of threads in the program being
|
|
debugged, and dump all registers contents
|
|
|
|
To use this example:
|
|
|
|
* run `ida64` on test program `simple_appcall_linux64`, or
|
|
`ida` on test program `simple_appcall_linux32`, and wait for
|
|
auto-analysis to finish
|
|
* put a breakpoint somewhere in the code
|
|
* select the 'linux debugger' (either local, or remote)
|
|
* start debugging
|
|
* Press Alt+Shift+C at the breakpoint
|
|
"""
|
|
import ida_idd
|
|
import ida_dbg
|
|
|
|
def log(msg):
|
|
print(">>> %s" % msg)
|
|
|
|
class print_registers_ah_t():
|
|
def activate(self, ctx):
|
|
log("=== registers ===")
|
|
dbg = ida_idd.get_dbg()
|
|
for tidx in range(ida_dbg.get_thread_qty()):
|
|
tid = ida_dbg.getn_thread(tidx)
|
|
log(" Thread #%d" % tid)
|
|
regvals = ida_dbg.get_reg_vals(tid)
|
|
for ridx, rv in enumerate(regvals):
|
|
rinfo = dbg.regs(ridx)
|
|
rval = rv.pyval(rinfo.dtype)
|
|
if isinstance(rval, int):
|
|
rval = "0x%x" % rval
|
|
log(" %s: %s" % (rinfo.name, rval))
|
|
log("=== end of registers ===")
|
|
|
|
def update(self, ctx):
|
|
return ida_kernwin.AST_ENABLE_ALWAYS
|
|
|
|
ACTION_NAME = "example:print_registers"
|
|
ACTION_LABEL = "Print registers"
|
|
ACTION_SHORTCUT = "Alt+Shift+C"
|
|
ACTION_HELP = "Press %s to print the registers" % ACTION_SHORTCUT
|
|
|
|
if ida_kernwin.register_action(ida_kernwin.action_desc_t(
|
|
ACTION_NAME,
|
|
ACTION_LABEL,
|
|
print_registers_ah_t(),
|
|
ACTION_SHORTCUT)):
|
|
print("Registered action \"%s\". %s" % (ACTION_LABEL, ACTION_HELP))
|
|
|