From 707db877f3b27b099d1794cc55278d422832aee5 Mon Sep 17 00:00:00 2001 From: Jason An Date: Tue, 13 Aug 2024 18:43:05 -0400 Subject: [PATCH] use user tags instead of auto tags for breakpoints (#2354) --- binja_script.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/binja_script.py b/binja_script.py index dfde12c2..3f65e748 100644 --- a/binja_script.py +++ b/binja_script.py @@ -40,20 +40,27 @@ def get_widest_func(bv: binaryninja.BinaryView, addr: int) -> binaryninja.Functi # workaround for BinaryView.add_tag not supporting auto tags -def add_auto_data_tag(bv: binaryninja.BinaryView, addr: int, name: str, desc: str) -> None: - tag = binaryninja.core.BNCreateTag(bv.get_tag_type(name).handle, desc) - binaryninja.core.BNAddTag(bv.handle, tag, False) - binaryninja.core.BNAddAutoDataTag(bv.handle, addr, tag) +def add_data_tag( + bv: binaryninja.BinaryView, addr: int, name: str, desc: str, auto: bool = False +) -> None: + if auto: + tag = binaryninja.core.BNCreateTag(bv.get_tag_type(name).handle, desc) + binaryninja.core.BNAddTag(bv.handle, tag, False) + binaryninja.core.BNAddAutoDataTag(bv.handle, addr, tag) + else: + bv.add_tag(addr, name, desc) # try to add a function tag to the widest function containing the address # if there are none, resort to a data tag instead -def add_auto_tag(bv: binaryninja.BinaryView, addr: int, name: str, desc: str) -> None: +def add_tag_at_addr( + bv: binaryninja.BinaryView, addr: int, name: str, desc: str, auto: bool = False +) -> None: f = get_widest_func(bv, addr) if f is None: - add_auto_data_tag(bv, addr, name, desc) + add_data_tag(bv, addr, name, desc, auto=auto) else: - f.add_tag(name, desc, addr=addr, auto=True) + f.add_tag(name, desc, addr=addr, auto=auto) # workaround for there to be no way to get all address tags in the python API @@ -120,7 +127,7 @@ class ServerHandler: Sets the 'current pc' tag to the specified address, and clears the old ones. """ self.clear_pc_tag() - add_auto_tag(self.bv, new_pc, "pwndbg-pc", "current pc") + add_tag_at_addr(self.bv, new_pc, "pwndbg-pc", "current pc", auto=True) @should_register def get_bp_tags(self) -> List[int]: @@ -399,7 +406,7 @@ def toggle_breakpoint(bv: binaryninja.BinaryView, addr: int) -> None: remove_tag_ref(bv, t) found = True if not found: - add_auto_tag(bv, addr, "pwndbg-bp", "GDB breakpoint") + add_tag_at_addr(bv, addr, "pwndbg-bp", "GDB breakpoint", auto=False) binaryninja.plugin.PluginCommand.register(