summaryrefslogtreecommitdiff
path: root/python/function.py
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2018-03-07 18:10:55 -0500
committerRusty Wagner <rusty@vector35.com>2018-03-07 18:11:24 -0500
commit1c7349fcf125994f2e577361626fe1fb02eac029 (patch)
tree9855e97a3572c41af9f07f27e6b12eb1f117bf5d /python/function.py
parent352949f41ea0b66c833f272d2a2a1e5a77a9507c (diff)
Add APIs for skipping analysis of functions that are too large, and overriding this behavior
Diffstat (limited to 'python/function.py')
-rw-r--r--python/function.py34
1 files changed, 33 insertions, 1 deletions
diff --git a/python/function.py b/python/function.py
index f68aa76f..0d796d98 100644
--- a/python/function.py
+++ b/python/function.py
@@ -26,7 +26,8 @@ import ctypes
import _binaryninjacore as core
from enums import (FunctionGraphType, BranchType, SymbolType, InstructionTextTokenType,
HighlightStandardColor, HighlightColorStyle, RegisterValueType, ImplicitRegisterExtend,
- DisassemblyOption, IntegerDisplayType, InstructionTextTokenContext, VariableSourceType)
+ DisassemblyOption, IntegerDisplayType, InstructionTextTokenContext, VariableSourceType,
+ FunctionAnalysisSkipOverride)
import architecture
import platform
import highlight
@@ -817,6 +818,32 @@ class Function(object):
for i in block:
yield i
+ @property
+ def too_large(self):
+ """Whether the function is too large to automatically perform analysis (read-only)"""
+ return core.BNIsFunctionTooLarge(self.handle)
+
+ @property
+ def analysis_skipped(self):
+ """Whether automatic analysis was skipped for this function"""
+ return core.BNIsFunctionAnalysisSkipped(self.handle)
+
+ @analysis_skipped.setter
+ def analysis_skipped(self, skip):
+ if skip:
+ core.BNSetFunctionAnalysisSkipOverride(self.handle, FunctionAnalysisSkipOverride.AlwaysSkipFunctionAnalysis)
+ else:
+ core.BNSetFunctionAnalysisSkipOverride(self.handle, FunctionAnalysisSkipOverride.NeverSkipFunctionAnalysis)
+
+ @property
+ def analysis_skip_override(self):
+ """Override for skipping of automatic analysis"""
+ return FunctionAnalysisSkipOverride(core.BNGetFunctionAnalysisSkipOverride(self.handle))
+
+ @analysis_skip_override.setter
+ def analysis_skip_override(self, override):
+ core.BNSetFunctionAnalysisSkipOverride(self.handle, override)
+
def __iter__(self):
count = ctypes.c_ulonglong()
blocks = core.BNGetFunctionBasicBlockList(self.handle, count)
@@ -1836,6 +1863,11 @@ class FunctionGraph(object):
return result
@property
+ def has_blocks(self):
+ """Whether the function graph has at least one block (read-only)"""
+ return core.BNFunctionGraphHasBlocks(self.handle)
+
+ @property
def width(self):
"""Function graph width (read-only)"""
return core.BNGetFunctionGraphWidth(self.handle)