mirror of
https://github.com/idapython/src
synced 2026-06-08 14:47:00 +00:00
85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
"""
|
|
summary: retrieve comments surrounding instructions
|
|
|
|
description:
|
|
Use the `ida_lines.get_extra_cmt` API to retrieve anterior
|
|
and posterior extra comments.
|
|
|
|
This script registers two actions, that can be used to dump
|
|
the previous and next extra comments.
|
|
|
|
level: intermediate
|
|
"""
|
|
|
|
import ida_lines
|
|
import ida_kernwin
|
|
|
|
# -----------------------------------------------------------------------
|
|
class dump_at_point_handler_t(ida_kernwin.action_handler_t):
|
|
def __init__(self, anchor):
|
|
ida_kernwin.action_handler_t.__init__(self)
|
|
self.anchor = anchor
|
|
|
|
def activate(self, ctx):
|
|
ea = ida_kernwin.get_screen_ea()
|
|
index = self.anchor
|
|
while True:
|
|
cmt = ida_lines.get_extra_cmt(ea, index)
|
|
if cmt is None:
|
|
break
|
|
print("Got: '%s'" % cmt)
|
|
index += 1
|
|
|
|
def update(self, ctx):
|
|
return ida_kernwin.AST_ENABLE_FOR_WIDGET \
|
|
if ctx.widget_type == ida_kernwin.BWN_DISASM \
|
|
else ida_kernwin.AST_DISABLE_FOR_WIDGET
|
|
|
|
@staticmethod
|
|
def compose_action_name(v):
|
|
return "dump_extra_comments:%s" % v
|
|
|
|
|
|
# --------------------------------------------------------
|
|
# action variants
|
|
|
|
class action_previous_handler_t(dump_at_point_handler_t):
|
|
ACTION_LABEL = "previous"
|
|
ACTION_SHORTCUT = "Ctrl+Shift+Y"
|
|
|
|
def __init__(self):
|
|
super(action_previous_handler_t, self).__init__(ida_lines.E_PREV)
|
|
|
|
class action_next_handler_t(dump_at_point_handler_t):
|
|
ACTION_LABEL = "next"
|
|
ACTION_SHORTCUT = "Ctrl+Shift+Z"
|
|
|
|
def __init__(self):
|
|
super(action_next_handler_t, self).__init__(ida_lines.E_NEXT)
|
|
|
|
|
|
# -----------------------------------------------------------------------
|
|
# create actions (and attach them to IDA View-A's context menu if possible)
|
|
widget_title = "IDA View-A"
|
|
ida_view = ida_kernwin.find_widget(widget_title)
|
|
|
|
action_variants = [
|
|
action_previous_handler_t,
|
|
action_next_handler_t,
|
|
]
|
|
for variant in action_variants:
|
|
actname = dump_at_point_handler_t.compose_action_name(variant.ACTION_LABEL)
|
|
if ida_kernwin.unregister_action(actname):
|
|
print("Unregistered previously-registered action \"%s\"" % actname)
|
|
|
|
desc = ida_kernwin.action_desc_t(
|
|
actname,
|
|
"Dump %s extra comments" % variant.ACTION_LABEL,
|
|
variant(),
|
|
variant.ACTION_SHORTCUT)
|
|
if ida_kernwin.register_action(desc):
|
|
print("Registered action \"%s\"" % actname)
|
|
|
|
if ida_view and ida_kernwin.attach_action_to_popup(ida_view, None, actname):
|
|
print("Permanently attached action \"%s\" to \"%s\"" % (actname, widget_title))
|