diff options
| author | Brian Potchik <brian@vector35.com> | 2019-04-11 16:46:46 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2019-04-11 16:46:46 -0400 |
| commit | 5e03e100bd0dcf5033476be3c3ab3ccad86532e6 (patch) | |
| tree | 11bd229467247e9c344cf2a9ea13159f7799256b | |
| parent | 5e0e2f6c667e34f38c7d28d0f40f6d10d9d41492 (diff) | |
Add GetStringAtAddress to the API.
| -rw-r--r-- | binaryninjaapi.h | 1 | ||||
| -rw-r--r-- | binaryninjacore.h | 4 | ||||
| -rw-r--r-- | binaryview.cpp | 6 | ||||
| -rw-r--r-- | python/binaryview.py | 20 |
4 files changed, 28 insertions, 3 deletions
diff --git a/binaryninjaapi.h b/binaryninjaapi.h index 9fe63e43..6c7b05b8 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -1403,6 +1403,7 @@ namespace BinaryNinja bool SkipAndReturnValue(Architecture* arch, uint64_t addr, uint64_t value); size_t GetInstructionLength(Architecture* arch, uint64_t addr); + bool GetStringAtAddress(uint64_t addr, BNStringReference& strRef); std::vector<BNStringReference> GetStrings(); std::vector<BNStringReference> GetStrings(uint64_t start, uint64_t len); diff --git a/binaryninjacore.h b/binaryninjacore.h index 8422cdfc..c1d993e5 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -2688,9 +2688,9 @@ extern "C" BINARYNINJACOREAPI void BNRegisterGlobalFunctionRecognizer(BNFunctionRecognizer* rec); + BINARYNINJACOREAPI bool BNGetStringAtAddress(BNBinaryView* view, uint64_t addr, BNStringReference* strRef); BINARYNINJACOREAPI BNStringReference* BNGetStrings(BNBinaryView* view, size_t* count); - BINARYNINJACOREAPI BNStringReference* BNGetStringsInRange(BNBinaryView* view, uint64_t start, - uint64_t len, size_t* count); + BINARYNINJACOREAPI BNStringReference* BNGetStringsInRange(BNBinaryView* view, uint64_t start, uint64_t len, size_t* count); BINARYNINJACOREAPI void BNFreeStringReferenceList(BNStringReference* strings); BINARYNINJACOREAPI BNVariableNameAndType* BNGetStackLayout(BNFunction* func, size_t* count); diff --git a/binaryview.cpp b/binaryview.cpp index 18cd4bb9..4e4620d7 100644 --- a/binaryview.cpp +++ b/binaryview.cpp @@ -1684,6 +1684,12 @@ size_t BinaryView::GetInstructionLength(Architecture* arch, uint64_t addr) } +bool BinaryView::GetStringAtAddress(uint64_t addr, BNStringReference& strRef) +{ + return BNGetStringAtAddress(m_object, addr, &strRef); +} + + vector<BNStringReference> BinaryView::GetStrings() { size_t count; diff --git a/python/binaryview.py b/python/binaryview.py index c92a9120..ca780fc4 100644 --- a/python/binaryview.py +++ b/python/binaryview.py @@ -3133,7 +3133,25 @@ class BinaryView(object): result.append(StringReference(self, StringType(strings[i].type), strings[i].start, strings[i].length)) core.BNFreeStringReferenceList(strings) return result - + + def get_string_at(self, addr): + """ + ``get_string_at`` returns the string that falls on given virtual address. + + :param int addr: virtual address to get the string from + :return: returns the StringReference at the given virtual address, otherwise None. + :rtype: StringReference + :Example: + + >>> bv.get_string_at(0x40302f) + <StringType.AsciiString: 0x403028, len 0x12> + + """ + str_ref = core.BNStringReference() + if not core.BNGetStringAtAddress(self.handle, addr, str_ref): + return None + return StringReference(self, StringType(str_ref.type), str_ref.start, str_ref.length) + def get_ascii_string_at(self, addr, min_length=4, max_length=None, require_cstring=True): """ ``get_ascii_string_at`` returns the string found at ``addr`` |
