summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2019-04-11 16:46:46 -0400
committerBrian Potchik <brian@vector35.com>2019-04-11 16:46:46 -0400
commit5e03e100bd0dcf5033476be3c3ab3ccad86532e6 (patch)
tree11bd229467247e9c344cf2a9ea13159f7799256b
parent5e0e2f6c667e34f38c7d28d0f40f6d10d9d41492 (diff)
Add GetStringAtAddress to the API.
-rw-r--r--binaryninjaapi.h1
-rw-r--r--binaryninjacore.h4
-rw-r--r--binaryview.cpp6
-rw-r--r--python/binaryview.py20
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``