Files
2025-03-13 16:17:53 +01:00

56 lines
1.4 KiB
Python

"""
This script shows how to send debugger commands and use the result in IDA
Copyright (c) 1990-2025 Hex-Rays
ALL RIGHTS RESERVED.
"""
from __future__ import print_function
import re
import ida_kernwin
# class to store parsed results
class exchain:
def __init__(self, m):
self.name = m.group(1)
self.addr = int(m.group(2), 16)
# Chooser class
class MyChoose(ida_kernwin.Choose):
def __init__(self, title, items):
ida_kernwin.Choose.__init__(self, title, [ ["Address", 16], ["Name", 250] ])
self.items = items
def OnGetLine(self, n):
o = self.items[n]
return ["%08X" % o.addr, o.name]
def OnGetSize(self):
return len(self.items)
def OnSelectLine(self, n):
ida_kernwin.jumpto(self.items[n].addr)
return (ida_kernwin.Choose.NOTHING_CHANGED, )
def main():
ok, s = ida_dbg.send_dbg_command("!exchain")
if not ok:
return (False, "Cannot execute the command (%s)" % s)
matches = re.finditer(r'[^:]+: ([^\(]+) \(([^\)]+)\)\n', s)
entries = [exchain(x) for x in matches]
if not entries:
return (False, "Nothing to display: Could parse the result!")
# Show a list of results, and let the user possibly jump to one of those
chooser = MyChoose("Exchain choose", entries)
chooser.Show()
return (True, "Success!")
ok, r = main()
if not ok:
print(r)