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

66 lines
1.6 KiB
Python

"""
summary: implement an alternative "Functions" window
description:
Partially re-implements the "Functions" widget present in
IDA, with a custom widget.
keywords: chooser, functions
see_also: choose, choose_multi, chooser_with_folders
level: intermediate
"""
import idautils
import idc
import ida_funcs
import ida_kernwin
class my_funcs_t(ida_kernwin.Choose):
def __init__(self, title):
ida_kernwin.Choose.__init__(
self,
title,
[ ["Address", 10 | ida_kernwin.Choose.CHCOL_HEX],
["Name", 30 | ida_kernwin.Choose.CHCOL_PLAIN | ida_kernwin.Choose.CHCOL_FNAME] ])
self.items = []
self.icon = ida_kernwin.get_icon_id_by_name("resources/menu/OpenFunctions.svg")
def OnInit(self):
self.items = [ [hex(x), ida_funcs.get_func_name(x), x]
for x in idautils.Functions() ]
return True
def OnGetSize(self):
return len(self.items)
def OnGetLine(self, n):
return self.items[n]
def OnDeleteLine(self, n):
ea = self.items[n][2]
idc.del_func(ea)
return (ida_kernwin.Choose.ALL_CHANGED, n)
def OnGetEA(self, n):
return self.items[n][2]
def OnRefresh(self, n):
self.OnInit()
# try to preserve the cursor
return [ida_kernwin.Choose.ALL_CHANGED] + self.adjust_last_item(n)
def OnClose(self):
print("closed ", self.title)
def show_my_funcs_t(modal=False):
c = my_funcs_t("My functions list")
c.Show(modal=modal)
if __name__ == "__main__":
show_my_funcs_t()