From c3e5c23d9f71fbb4020fe4f71a01b10734d93946 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Tue, 12 Jul 2016 17:05:51 -0400 Subject: Add token and line types for function headers in linear view --- binaryninjacore.h | 12 +++++++++++- binaryview.cpp | 2 ++ python/__init__.py | 5 +++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/binaryninjacore.h b/binaryninjacore.h index 0f88972d..223b9fac 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -159,6 +159,11 @@ extern "C" FloatingPointToken = 8, AnnotationToken = 9, CodeRelativeAddressToken = 10, + VariableTypeToken = 11, + FunctionReturnTypeToken = 12, + FunctionAttributeToken = 13, + ArgumentTypeToken = 14, + ArgumentNameToken = 15, // The following are output by the analysis system automatically, these should // not be used directly by the architecture plugins @@ -171,12 +176,17 @@ extern "C" enum BNLinearDisassemblyLineType { + BlankLineType, CodeDisassemblyLineType, DataVariableLineType, HexDumpLineType, FunctionHeaderLineType, + FunctionHeaderStartLineType, + FunctionHeaderEndLineType, FunctionContinuationLineType, - StackVariableLineType + StackVariableLineType, + StackVariableListEndLineType, + FunctionEndLineType }; enum BNSymbolType diff --git a/binaryview.cpp b/binaryview.cpp index ee01d122..864b4687 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -1166,6 +1166,7 @@ vector BinaryView::GetPreviousLinearDisassemblyLines(Line for (size_t i = 0; i < count; i++) { LinearDisassemblyLine line; + line.type = lines[i].type; line.function = lines[i].function ? new Function(BNNewFunctionReference(lines[i].function)) : nullptr; line.block = lines[i].block ? new BasicBlock(BNNewBasicBlockReference(lines[i].block)) : nullptr; line.lineOffset = lines[i].lineOffset; @@ -1206,6 +1207,7 @@ vector BinaryView::GetNextLinearDisassemblyLines(LinearDi for (size_t i = 0; i < count; i++) { LinearDisassemblyLine line; + line.type = lines[i].type; line.function = lines[i].function ? new Function(BNNewFunctionReference(lines[i].function)) : nullptr; line.block = lines[i].block ? new BasicBlock(BNNewBasicBlockReference(lines[i].block)) : nullptr; line.lineOffset = lines[i].lineOffset; diff --git a/python/__init__.py b/python/__init__.py index 5d6be5ba..f2be8758 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -683,7 +683,8 @@ class LinearDisassemblyPosition(object): self.address = addr class LinearDisassemblyLine(object): - def __init__(self, func, block, line_offset, contents): + def __init__(self, line_type, func, block, line_offset, contents): + self.type = line_type self.function = func self.block = block self.line_offset = line_offset @@ -1604,7 +1605,7 @@ class BinaryView(object): value = lines[i].contents.tokens[j].value tokens.append(InstructionTextToken(token_type, text, value)) contents = DisassemblyTextLine(addr, tokens) - result.append(LinearDisassemblyLine(func, block, lines[i].lineOffset, contents)) + result.append(LinearDisassemblyLine(lines[i].type, func, block, lines[i].lineOffset, contents)) func = None block = None -- cgit v1.3.1