mirror of
https://github.com/idapython/src
synced 2026-06-08 14:47:00 +00:00
308 lines
7.6 KiB
Python
308 lines
7.6 KiB
Python
"""
|
|
summary: react to database events/notifications
|
|
|
|
description:
|
|
these hooks will be notified about IDB events, and
|
|
dump their information to the "Output" window
|
|
|
|
level: intermediate
|
|
"""
|
|
|
|
import inspect
|
|
|
|
import ida_idp
|
|
|
|
class idb_logger_hooks_t(ida_idp.IDB_Hooks):
|
|
|
|
def __init__(self):
|
|
ida_idp.IDB_Hooks.__init__(self)
|
|
self.inhibit_log = 0;
|
|
|
|
def _format_value(self, v):
|
|
return str(v)
|
|
|
|
def _log(self, msg=None):
|
|
if self.inhibit_log <= 0:
|
|
if msg:
|
|
print(">>> idb_logger_hooks_t: %s" % msg)
|
|
else:
|
|
stack = inspect.stack()
|
|
frame, _, _, _, _, _ = stack[1]
|
|
args, _, _, values = inspect.getargvalues(frame)
|
|
method_name = inspect.getframeinfo(frame)[2]
|
|
argstrs = []
|
|
for arg in args[1:]:
|
|
argstrs.append("%s=%s" % (arg, self._format_value(values[arg])))
|
|
print(">>> idb_logger_hooks_t.%s: %s" % (method_name, ", ".join(argstrs)))
|
|
return 0
|
|
|
|
def adding_segm(self, segment):
|
|
return self._log()
|
|
|
|
def allsegs_moved(self, info):
|
|
return self._log()
|
|
|
|
def auto_empty(self):
|
|
return self._log()
|
|
|
|
def auto_empty_finally(self):
|
|
return self._log()
|
|
|
|
def bookmark_changed(self, index, pos, desc, op):
|
|
return self._log()
|
|
|
|
def byte_patched(self, ea, old_value):
|
|
return self._log()
|
|
|
|
def callee_addr_changed(self, ea, callee):
|
|
return self._log()
|
|
|
|
def changing_cmt(self, ea, is_repeatable, new_comment):
|
|
return self._log()
|
|
|
|
def changing_op_ti(self, ea, n, new_type, new_fnames):
|
|
return self._log()
|
|
|
|
def changing_op_type(self, ea, n, opinfo):
|
|
return self._log()
|
|
|
|
def changing_range_cmt(self, kind, _range, comment, is_repeatable):
|
|
return self._log()
|
|
|
|
def changing_segm_class(self, segment):
|
|
return self._log()
|
|
|
|
def changing_segm_end(self, segment, new_end, flags):
|
|
return self._log()
|
|
|
|
def changing_segm_name(self, segment, old_name):
|
|
return self._log()
|
|
|
|
def changing_segm_start(self, segment, new_start, flags):
|
|
return self._log()
|
|
|
|
def changing_struc_cmt(self, tid, is_repeatable, comment):
|
|
return self._log()
|
|
|
|
def changing_struc_member(self, sptr, mptr, flags, ti, nbytes):
|
|
return self._log()
|
|
|
|
def changing_ti(self, ea, new_type, new_fnames):
|
|
return self._log()
|
|
|
|
def closebase(self):
|
|
return self._log()
|
|
|
|
def cmt_changed(self, ea, is_repeatable):
|
|
return self._log()
|
|
|
|
def compiler_changed(self, may_adjust_inf_fields):
|
|
return self._log()
|
|
|
|
def deleting_func(self, pfn):
|
|
return self._log()
|
|
|
|
def deleting_func_tail(self, pfn, tail):
|
|
return self._log()
|
|
|
|
def deleting_segm(self, start_ea):
|
|
return self._log()
|
|
|
|
def deleting_tryblks(self, _range):
|
|
return self._log()
|
|
|
|
def destroyed_items(self, ea1, ea2, will_disable_range):
|
|
return self._log()
|
|
|
|
def determined_main(self, main):
|
|
return self._log()
|
|
|
|
def dirtree_link(self, dt, path, is_link):
|
|
return self._log()
|
|
|
|
def dirtree_mkdir(self, dt, path):
|
|
return self._log()
|
|
|
|
def dirtree_move(self, dt, _from, to):
|
|
return self._log()
|
|
|
|
def dirtree_rank(self, dt, path, rank):
|
|
return self._log()
|
|
|
|
def dirtree_rmdir(self, dt, path):
|
|
return self._log()
|
|
|
|
def dirtree_rminode(self, dt, inode):
|
|
return self._log()
|
|
|
|
def dirtree_segm_moved(self, dt):
|
|
return self._log()
|
|
|
|
def extlang_changed(self, kind, el, idx):
|
|
return self._log()
|
|
|
|
def extra_cmt_changed(self, ea, line_idx, comment):
|
|
return self._log()
|
|
|
|
def flow_chart_created(self, fc):
|
|
return self._log()
|
|
|
|
def frame_deleted(self, pfn):
|
|
return self._log()
|
|
|
|
def func_added(self, pfn):
|
|
return self._log()
|
|
|
|
def func_deleted(self, func_ea):
|
|
return self._log()
|
|
|
|
def func_noret_changed(self, pfn):
|
|
return self._log()
|
|
|
|
def func_tail_appended(self, pfn, tail):
|
|
return self._log()
|
|
|
|
def func_tail_deleted(self, pfn, tail_ea):
|
|
return self._log()
|
|
|
|
def func_updated(self, pfn):
|
|
return self._log()
|
|
|
|
def idasgn_loaded(self, sig_name):
|
|
return self._log()
|
|
|
|
def idasgn_matched_ea(self, ea, name, lib):
|
|
return self._log()
|
|
|
|
def item_color_changed(self, ea, color):
|
|
return self._log()
|
|
|
|
def kernel_config_loaded(self, pass_number):
|
|
return self._log()
|
|
|
|
def loader_finished(self, li, neflags, filetypename):
|
|
return self._log()
|
|
|
|
def local_types_changed(self, ltc, ordinal, name):
|
|
return self._log()
|
|
|
|
def make_code(self, insn):
|
|
return self._log()
|
|
|
|
def make_data(self, ea, flags, tid, _len):
|
|
return self._log()
|
|
|
|
def op_ti_changed(self, ea, n, _type, fnames):
|
|
return self._log()
|
|
|
|
def op_type_changed(self, ea, n):
|
|
return self._log()
|
|
|
|
def range_cmt_changed(self, kind, _range, comment, is_repeatable):
|
|
return self._log()
|
|
|
|
def renamed(self, ea, new_name, is_local_name, old_name):
|
|
return self._log()
|
|
|
|
def savebase(self):
|
|
return self._log()
|
|
|
|
def segm_added(self, segment):
|
|
return self._log()
|
|
|
|
def segm_attrs_updated(self, segment):
|
|
return self._log()
|
|
|
|
def segm_class_changed(self, segment, sclass):
|
|
return self._log()
|
|
|
|
def segm_deleted(self, start_ea, end_ea, flags):
|
|
return self._log()
|
|
|
|
def segm_end_changed(self, segment, old_end):
|
|
return self._log()
|
|
|
|
def segm_moved(self, _from, to, size, changed_netmap):
|
|
return self._log()
|
|
|
|
def segm_name_changed(self, segment, name):
|
|
return self._log()
|
|
|
|
def segm_start_changed(self, segment, old_start):
|
|
return self._log()
|
|
|
|
def set_func_end(self, pfn, new_end):
|
|
return self._log()
|
|
|
|
def set_func_start(self, pfn, new_start):
|
|
return self._log()
|
|
|
|
def sgr_changed(self, start_ea, end_ea, regnum, value, old_value, tag):
|
|
return self._log()
|
|
|
|
def sgr_deleted(self, start_ea, end_ea, regnum):
|
|
return self._log()
|
|
|
|
def stkpnts_changed(self, pfn):
|
|
return self._log()
|
|
|
|
def struc_member_changed(self, sptr, mptr):
|
|
return self._log()
|
|
|
|
def tail_owner_changed(self, tail, owner_func, old_owner):
|
|
return self._log()
|
|
|
|
def thunk_func_created(self, pfn):
|
|
return self._log()
|
|
|
|
def ti_changed(self, ea, _type, fnames):
|
|
return self._log()
|
|
|
|
def tryblks_updated(self, tbv):
|
|
return self._log()
|
|
|
|
def updating_tryblks(self, tbv):
|
|
return self._log()
|
|
|
|
def upgraded(self, _from):
|
|
return self._log()
|
|
|
|
def lt_udm_created(self, udt_name, udm):
|
|
return self._log()
|
|
|
|
def lt_udm_deleted(self, udt_name, udm_tid, udm):
|
|
return self._log()
|
|
|
|
def lt_udm_renamed(self, udt_name, udm, oldname):
|
|
return self._log()
|
|
|
|
def lt_udm_changed(self, udt_name, tid, old, new):
|
|
return self._log()
|
|
|
|
def lt_udt_expanded(self, udt_name, udm_tid, delta):
|
|
return self._log()
|
|
|
|
def frame_created(self, func_ea):
|
|
return self._log()
|
|
|
|
def frame_deleted(self, pfn):
|
|
return self._log()
|
|
|
|
def frame_udm_created(self, func_ea, udm):
|
|
return self._log()
|
|
|
|
def frame_udm_deleted(self, func_ea, udm_tid, udm):
|
|
return self._log()
|
|
|
|
def frame_udm_renamed(self, func_ea, udm, oldname):
|
|
return self._log()
|
|
|
|
def frame_udm_changed(self, func_ea, udm_tid, udm_old, udm_new):
|
|
return self._log()
|
|
|
|
def frame_expanded(self, func_ea, udm_tid, delta):
|
|
return self._log()
|
|
|
|
idb_hooks = idb_logger_hooks_t()
|
|
idb_hooks.hook()
|