diff --git a/obpoplugin/idahelper.py b/obpoplugin/idahelper.py index 36145b9..c5c36e7 100644 --- a/obpoplugin/idahelper.py +++ b/obpoplugin/idahelper.py @@ -18,6 +18,18 @@ def get_block_start(ea): return ea +def set_block_color(ea, color): + func = get_func(ea) + if not func: + return + c = FlowChart(func) + for block in c: + if block.start_ea <= ea < block.end_ea: + ni = node_info_t() + ni.bg_color = color + set_node_info(func.start_ea, block.id, ni, NIF_BG_COLOR) + + def visit_instructions(bb: mblock_t): if not bb or not bb.head: return [] diff --git a/obpoplugin/manager.py b/obpoplugin/manager.py index da4d4d5..77c2db4 100644 --- a/obpoplugin/manager.py +++ b/obpoplugin/manager.py @@ -3,7 +3,7 @@ # CreateTime: 2022/3/22 from ida_hexrays import mba_t from ida_idaapi import BADADDR -from obpoplugin.idahelper import get_func_start, get_block_start +from obpoplugin.idahelper import get_func_start, get_block_start, set_block_color # Mark Manager @@ -15,17 +15,25 @@ def __init__(self): def mark(self, ea): s = self.func_marked(ea) s.add(get_block_start(ea)) + set_block_color(ea, 0x00ff00) def unmark(self, ea): s = self.func_marked(ea) ea = get_block_start(ea) - if ea in s: s.remove(ea) + if ea in s: + set_block_color(ea, 0xffffff) + s.remove(ea) def unmark_func(self, ea): s = self.func_marked(ea) + for ea in s: + set_block_color(ea, 0xffffff) s.clear() def clear(self): + for s in self.marked.values(): + for ea in s: + set_block_color(ea, 0xffffff) self.marked.clear() def func_marked(self, ea):