diff options
| author | Rusty Wagner <rusty@vector35.com> | 2016-07-30 02:10:43 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2016-07-30 02:10:43 -0400 |
| commit | fc63dfdd3487a5d296087cbe2b898eb22e67d3aa (patch) | |
| tree | 3620a9c47b460f99e2de519d01152ede217a9529 | |
| parent | 038d192dfb3f73a268447d890cccf27926d35941 (diff) | |
Add API to find data in a binary view
| -rw-r--r-- | binaryninjaapi.h | 2 | ||||
| -rw-r--r-- | binaryninjacore.h | 9 | ||||
| -rw-r--r-- | binaryview.cpp | 6 | ||||
| -rw-r--r-- | python/__init__.py | 7 |
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) |
