summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2016-07-30 02:10:43 -0400
committerRusty Wagner <rusty@vector35.com>2016-07-30 02:10:43 -0400
commitfc63dfdd3487a5d296087cbe2b898eb22e67d3aa (patch)
tree3620a9c47b460f99e2de519d01152ede217a9529
parent038d192dfb3f73a268447d890cccf27926d35941 (diff)
Add API to find data in a binary view
-rw-r--r--binaryninjaapi.h2
-rw-r--r--binaryninjacore.h9
-rw-r--r--binaryview.cpp6
-rw-r--r--python/__init__.py7
4 files changed, 24 insertions, 0 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h
index d5d12dce..2b2ccc48 100644
--- a/binaryninjaapi.h
+++ b/binaryninjaapi.h
@@ -902,6 +902,8 @@ namespace BinaryNinja
void DefineUserType(const std::string& name, Type* type);
void UndefineType(const std::string& name);
void UndefineUserType(const std::string& name);
+
+ bool FindNextData(uint64_t start, const DataBuffer& data, uint64_t& result, BNFindFlag flags = NoFindFlags);
};
class BinaryData: public BinaryView
diff --git a/binaryninjacore.h b/binaryninjacore.h
index 1ca43677..13f54943 100644
--- a/binaryninjacore.h
+++ b/binaryninjacore.h
@@ -957,6 +957,12 @@ extern "C"
size_t count, total;
};
+ enum BNFindFlag
+ {
+ NoFindFlags = 0,
+ FindCaseInsensitive = 1
+ };
+
BINARYNINJACOREAPI char* BNAllocString(const char* contents);
BINARYNINJACOREAPI void BNFreeString(char* str);
@@ -1131,6 +1137,9 @@ extern "C"
BINARYNINJACOREAPI size_t BNGetInstructionLength(BNBinaryView* view, BNArchitecture* arch, uint64_t addr);
+ BINARYNINJACOREAPI bool BNFindNextData(BNBinaryView* view, uint64_t start, BNDataBuffer* data, uint64_t* result,
+ BNFindFlag flags);
+
// Raw binary data view
BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataView(BNFileMetadata* file);
BINARYNINJACOREAPI BNBinaryView* BNCreateBinaryDataViewFromBuffer(BNFileMetadata* file, BNDataBuffer* buf);
diff --git a/binaryview.cpp b/binaryview.cpp
index 192b9b37..8a2d1c2d 100644
--- a/binaryview.cpp
+++ b/binaryview.cpp
@@ -1421,6 +1421,12 @@ void BinaryView::UndefineUserType(const std::string& name)
}
+bool BinaryView::FindNextData(uint64_t start, const DataBuffer& data, uint64_t& result, BNFindFlag flags)
+{
+ return BNFindNextData(m_object, start, data.GetBufferObject(), &result, flags);
+}
+
+
BinaryData::BinaryData(FileMetadata* file): BinaryView(BNCreateBinaryDataView(file->GetObject()))
{
}
diff --git a/python/__init__.py b/python/__init__.py
index 100d01d8..5d78a569 100644
--- a/python/__init__.py
+++ b/python/__init__.py
@@ -1782,6 +1782,13 @@ class BinaryView(object):
def undefine_user_type(self, name):
core.BNUndefineUserAnalysisType(self.handle, name)
+ def find_next_data(self, start, data, flags = 0):
+ buf = DataBuffer(str(data))
+ result = ctypes.c_ulonglong()
+ if not core.BNFindNextData(self.handle, start, buf.handle, result, flags):
+ return None
+ return result.value
+
def __setattr__(self, name, value):
try:
object.__setattr__(self,name,value)