mirror of
https://github.com/idapython/src
synced 2026-06-08 14:47:00 +00:00
56 lines
1.4 KiB
Python
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)
|