summaryrefslogtreecommitdiff
path: root/python/databuffer.py
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2018-08-29 15:26:00 -0400
committerPeter LaFosse <peter@vector35.com>2018-08-31 14:21:07 -0400
commitf0ccb75e7d80a6c0ae8b01d794b929f03bc6ea6d (patch)
tree7569fe7689062b265329ad0f649705aa8caab922 /python/databuffer.py
parenta6b801afadada75afd2b1779edee8d203f3b3140 (diff)
parent426bb3d8b47b93658bf969c429a8b98adae13c30 (diff)
Merging with dev
Diffstat (limited to 'python/databuffer.py')
-rw-r--r--python/databuffer.py30
1 files changed, 21 insertions, 9 deletions
diff --git a/python/databuffer.py b/python/databuffer.py
index 3f9e4ce5..2fb5382d 100644
--- a/python/databuffer.py
+++ b/python/databuffer.py
@@ -21,11 +21,21 @@
import ctypes
# Binary Ninja components
-import _binaryninjacore as core
+from binaryninja import _binaryninjacore as core
+
+# 2-3 compatibility
+from binaryninja import pyNativeStr
class DataBuffer(object):
def __init__(self, contents="", handle=None):
+
+ # python3 no longer has longs
+ try:
+ long
+ except NameError:
+ long = int
+
if handle is not None:
self.handle = core.handle_of_type(handle, core.BNDataBuffer)
elif isinstance(contents, int) or isinstance(contents, long):
@@ -44,7 +54,7 @@ class DataBuffer(object):
def __getitem__(self, i):
if isinstance(i, tuple):
result = ""
- source = str(self)
+ source = bytes(self)
for s in i:
result += source[s]
return result
@@ -59,7 +69,7 @@ class DataBuffer(object):
ctypes.memmove(buf, core.BNGetDataBufferContentsAt(self.handle, start), stop - start)
return buf.raw
else:
- return str(self)[i]
+ return bytes(self)[i]
elif i < 0:
if i >= -len(self):
return chr(core.BNGetDataBufferByte(self.handle, int(len(self) + i)))
@@ -79,7 +89,7 @@ class DataBuffer(object):
if stop < start:
stop = start
if len(value) != (stop - start):
- data = str(self)
+ data = bytes(self)
data = data[0:start] + value + data[stop:]
core.BNSetDataBufferContents(self.handle, data, len(data))
else:
@@ -107,22 +117,24 @@ class DataBuffer(object):
def __str__(self):
buf = ctypes.create_string_buffer(len(self))
ctypes.memmove(buf, core.BNGetDataBufferContents(self.handle), len(self))
- return buf.raw
+ return pyNativeStr(buf.raw)
- def __repr__(self):
- return repr(str(self))
+ def __bytes__(self):
+ buf = ctypes.create_string_buffer(len(self))
+ ctypes.memmove(buf, core.BNGetDataBufferContents(self.handle), len(self))
+ return buf.raw
def escape(self):
return core.BNDataBufferToEscapedString(self.handle)
def unescape(self):
- return DataBuffer(handle=core.BNDecodeEscapedString(str(self)))
+ return DataBuffer(handle=core.BNDecodeEscapedString(bytes(self)))
def base64_encode(self):
return core.BNDataBufferToBase64(self.handle)
def base64_decode(self):
- return DataBuffer(handle = core.BNDecodeBase64(str(self)))
+ return DataBuffer(handle = core.BNDecodeBase64(bytes(self)))
def zlib_compress(self):
buf = core.BNZlibCompress(self.handle)