mirror of https://github.com/pwndbg/pwndbg.git
Port binja integration to aglib (#2676)
* port binja integration to aglib * rem importpull/2681/head 2025.01.20
parent
4b70da5a64
commit
ef9a40317f
@ -0,0 +1,58 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
|
import gdb
|
||||||
|
|
||||||
|
import pwndbg.aglib.proc
|
||||||
|
import pwndbg.aglib.regs
|
||||||
|
import pwndbg.commands
|
||||||
|
import pwndbg.gdblib.functions
|
||||||
|
import pwndbg.integration.binja
|
||||||
|
from pwndbg.color import message
|
||||||
|
|
||||||
|
|
||||||
|
@pwndbg.gdblib.functions.GdbFunction()
|
||||||
|
@pwndbg.integration.binja.with_bn()
|
||||||
|
def bn_sym(name_val: gdb.Value) -> int | None:
|
||||||
|
"""Lookup a symbol's address by name from Binary Ninja."""
|
||||||
|
name = name_val.string()
|
||||||
|
addr: int | None = pwndbg.integration.binja._bn.get_symbol_addr(name)
|
||||||
|
if addr is None:
|
||||||
|
return None
|
||||||
|
return pwndbg.integration.binja.r2l(addr)
|
||||||
|
|
||||||
|
|
||||||
|
@pwndbg.gdblib.functions.GdbFunction()
|
||||||
|
@pwndbg.integration.binja.with_bn()
|
||||||
|
def bn_var(name_val: gdb.Value) -> int | None:
|
||||||
|
"""Lookup a stack variable's address by name from Binary Ninja."""
|
||||||
|
name = name_val.string()
|
||||||
|
conf_and_offset: Tuple[int, int] | None = pwndbg.integration.binja._bn.get_var_offset_from_sp(
|
||||||
|
pwndbg.integration.binja.l2r(pwndbg.aglib.regs.pc), name
|
||||||
|
)
|
||||||
|
if conf_and_offset is None:
|
||||||
|
return None
|
||||||
|
(conf, offset) = conf_and_offset
|
||||||
|
if conf < 64:
|
||||||
|
print(message.warn(f"Warning: Stack offset only has {conf / 255 * 100:.2f}% confidence"))
|
||||||
|
return pwndbg.aglib.regs.sp + offset
|
||||||
|
|
||||||
|
|
||||||
|
@pwndbg.gdblib.functions.GdbFunction()
|
||||||
|
@pwndbg.integration.binja.with_bn()
|
||||||
|
def bn_eval(expr: gdb.Value) -> int | None:
|
||||||
|
"""Parse and evaluate a Binary Ninja expression.
|
||||||
|
|
||||||
|
Docs: https://api.binary.ninja/binaryninja.binaryview-module.html#binaryninja.binaryview.BinaryView.parse_expression
|
||||||
|
|
||||||
|
Adds all registers in the current register set as magic variables (e.g. $rip).
|
||||||
|
Also adds a $piebase magic variable with the computed executable base."""
|
||||||
|
magic_vars = {}
|
||||||
|
for r in pwndbg.aglib.regs.current:
|
||||||
|
v = pwndbg.aglib.regs[r]
|
||||||
|
if v is not None:
|
||||||
|
magic_vars[r] = v
|
||||||
|
magic_vars["piebase"] = pwndbg.aglib.proc.binary_base_addr
|
||||||
|
ret: int | None = pwndbg.integration.binja._bn.parse_expr(expr.string(), magic_vars)
|
||||||
|
return ret
|
||||||
Loading…
Reference in new issue