Skip to content

Commit

Permalink
SSA Variables and new graph api
Browse files Browse the repository at this point in the history
* Support SSARegisters, SSAVariables, and Variables in the grapher
* Support SSAVariables in the match generator
* Update to use newly fixed graph display api
  • Loading branch information
Ryan Stortz committed Apr 10, 2020
1 parent 058a071 commit 6492b2f
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 2 deletions.
45 changes: 44 additions & 1 deletion __init__.py
Expand Up @@ -49,6 +49,20 @@
if sys.version_info > (3,):
long = int

def show_graph_report(bv, g, name):

# 1.3.2086-dev
major, minor, patch = binaryninja.core_version().split('.')
major = int(major)
minor = int(minor)
patch = int(patch.split('-')[0])

if major == 1 and minor <= 3 and patch < 2086:
g.show(name)
return

bv.show_graph_report(name, g)


def graph_il_insn(g, head, il, label=None):
# type: (FlowGraph, FlowGraphNode, LowLevelILInstruction, Optional[str]) -> None
Expand Down Expand Up @@ -107,6 +121,27 @@ def graph_il_insn(g, head, il, label=None):
InstructionTextTokenType.IntegerToken, "{:x}".format(il), value=il
)
)
elif isinstance(il, lowlevelil.SSARegister):
tokens.append(
InstructionTextToken(InstructionTextTokenType.TextToken, "<SSARegister>")
)

graph_il_insn(g, record, il.reg, "reg")
graph_il_insn(g, record, il.version, "version")
elif isinstance(il, mediumlevelil.SSAVariable):
tokens.append(
InstructionTextToken(InstructionTextTokenType.TextToken, "<SSAVariable>")
)

graph_il_insn(g, record, il.var, "var")
graph_il_insn(g, record, il.version, "version")
elif isinstance(il, function.Variable):
tokens.append(
InstructionTextToken(InstructionTextTokenType.TextToken, "<Variable>")
)

graph_il_insn(g, record, il.name, "name")
graph_il_insn(g, record, il.type, "type")
else:
tokens.append(
InstructionTextToken(InstructionTextTokenType.TextToken, str(il))
Expand Down Expand Up @@ -216,7 +251,7 @@ def graph_bnil(bv, addr):

graph_ils(bv, g, head, function, addr)

g.show("Instruction Graph ({:#x})".format(addr))
show_graph_report(bv, g, "Instruction Graph ({:#x})".format(addr))


def match_condition(name, o):
Expand Down Expand Up @@ -277,6 +312,14 @@ def match_condition(name, o):
match += ["if {}.version != {}:".format(name, o.version)]
match += [" return False\n"]

elif isinstance(o, SSAVariable):
match += ["if {}.var.name != '{}':".format(name, o.var.name)]
match += [" return False\n"]

match += ["if {}.version != {}:".format(name, o.version)]
match += [" return False\n"]


else:
match += ["if {} != {}:".format(name, o)]
match += [" return False\n"]
Expand Down
2 changes: 1 addition & 1 deletion plugin.json
Expand Up @@ -25,6 +25,6 @@
"Windows": "",
"Linux": ""
},
"version": "1.2.1",
"version": "1.2.2",
"minimumbinaryninjaversion": 0
}

0 comments on commit 6492b2f

Please sign in to comment.