Repository URL to install this package:
Version:
9.0~241217-2.fc41 ▾
|
"""
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))