summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2016-08-30 21:59:40 -0400
committerRusty Wagner <rusty@vector35.com>2016-08-30 21:59:40 -0400
commit3978e18b09ca745fd08defb8f00fbece267beaf2 (patch)
tree5c5bf1ded8c38f3f18874f5990641f701fd194a7
parent827662fbb6caa9d0aa3089cafb20a578a68eaee7 (diff)
Add API to reanalyze
-rw-r--r--binaryninjaapi.h4
-rw-r--r--binaryninjacore.h3
-rw-r--r--binaryview.cpp6
-rw-r--r--function.cpp6
-rw-r--r--python/__init__.py16
5 files changed, 35 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index f60ee159..7c417623 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -919,6 +919,8 @@ namespace BinaryNinja
void UndefineUserType(const std::string& name);
bool FindNextData(uint64_t start, const DataBuffer& data, uint64_t& result, BNFindFlag flags = NoFindFlags);
+
+ void Reanalyze();
};
class BinaryData: public BinaryView
@@ -1672,6 +1674,8 @@ namespace BinaryNinja
size_t operand);
void SetIntegerConstantDisplayType(Architecture* arch, uint64_t instrAddr, uint64_t value, size_t operand,
BNIntegerDisplayType type);
+
+ void Reanalyze();
};
struct FunctionGraphEdge
diff --git a/binaryninjacore.h b/binaryninjacore.h
index c293f940..3aa0a1e6 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -1565,6 +1565,9 @@ extern "C"
BINARYNINJACOREAPI void BNUndefineAnalysisType(BNBinaryView* view, const char* name);
BINARYNINJACOREAPI void BNUndefineUserAnalysisType(BNBinaryView* view, const char* name);
+ BINARYNINJACOREAPI void BNReanalyzeAllFunctions(BNBinaryView* view);
+ BINARYNINJACOREAPI void BNReanalyzeFunction(BNFunction* func);
+
// Disassembly settings
BINARYNINJACOREAPI BNDisassemblySettings* BNCreateDisassemblySettings(void);
BINARYNINJACOREAPI BNDisassemblySettings* BNNewDisassemblySettingsReference(BNDisassemblySettings* settings);
diff --git a/binaryview.cpp b/binaryview.cpp
index 14393930..6631f3d6 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -1440,6 +1440,12 @@ bool BinaryView::FindNextData(uint64_t start, const DataBuffer& data, uint64_t&
}
+void BinaryView::Reanalyze()
+{
+ BNReanalyzeAllFunctions(m_object);
+}
+
+
BinaryData::BinaryData(FileMetadata* file): BinaryView(BNCreateBinaryDataView(file->GetObject()))
{
}
diff --git a/function.cpp b/function.cpp
index 78a33bda..cbd9ec40 100644
--- a/function.cpp
+++ b/function.cpp
@@ -572,3 +572,9 @@ void Function::SetIntegerConstantDisplayType(Architecture* arch, uint64_t instrA
{
BNSetIntegerConstantDisplayType(m_object, arch->GetObject(), instrAddr, value, operand, type);
}
+
+
+void Function::Reanalyze()
+{
+ BNReanalyzeFunction(m_object);
+}
diff --git a/python/__init__.py b/python/__init__.py
index e9f036ae..82aaba32 100644
--- a/python/__init__.py
+++ b/python/__init__.py
@@ -3231,6 +3231,14 @@ class BinaryView(object):
return None
return result.value
+ def reanalyze(self):
+ """
+ ``reanalyze`` causes all functions to be reanalyzed. This function does not wait for the analysis to finish.
+
+ :rtype: None
+ """
+ core.BNReanalyzeAllFunctions(self.handle)
+
def __setattr__(self, name, value):
try:
object.__setattr__(self,name,value)
@@ -4677,6 +4685,14 @@ class Function(object):
display_type = core.BNIntegerDisplayType_by_name[display_type]
core.BNSetIntegerConstantDisplayType(self.handle, arch.handle, instr_addr, value, operand, display_type)
+ def reanalyze(self):
+ """
+ ``reanalyze`` causes this functions to be reanalyzed. This function does not wait for the analysis to finish.
+
+ :rtype: None
+ """
+ core.BNReanalyzeFunction(self.handle)
+
class BasicBlockEdge:
def __init__(self, branch_type, target, arch):
self.type = core.BNBranchType_names[branch_type]