mirror of https://github.com/pwndbg/pwndbg
use user tags instead of auto tags for breakpoints (#2354)
This commit is contained in:
parent
4193a40a6d
commit
707db877f3
|
@ -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:
|
||||
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(
|
||||
|
|
Loading…
Reference in New Issue