about summary refs log tree commit diff stats
path: root/miasm2/core/bin_stream.py
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2019-02-08 13:45:00 +0100
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2019-02-11 16:03:39 +0100
commit0fecc22af0a10d4871e68532bbab69d1bffadec5 (patch)
tree2ddee1f7d4d4e5f4b2566d16cec5823cbe084ef3 /miasm2/core/bin_stream.py
parentd73460dd09302b1a272ad7e3e2cfd1c7cf0bf86c (diff)
downloadmiasm-0fecc22af0a10d4871e68532bbab69d1bffadec5.tar.gz
miasm-0fecc22af0a10d4871e68532bbab69d1bffadec5.zip
API: replace shift_offset by base_address
WARNING: base address is the negative of shift_offset
Diffstat (limited to 'miasm2/core/bin_stream.py')
-rw-r--r--miasm2/core/bin_stream.py38
1 files changed, 21 insertions, 17 deletions
diff --git a/miasm2/core/bin_stream.py b/miasm2/core/bin_stream.py
index 1dada90f..af31a52c 100644
--- a/miasm2/core/bin_stream.py
+++ b/miasm2/core/bin_stream.py
@@ -160,61 +160,65 @@ class bin_stream(object):
 
 class bin_stream_str(bin_stream):
 
-    def __init__(self, input_str="", offset=0L, shift=0):
+    def __init__(self, input_str="", offset=0L, base_address=0, shift=None):
         bin_stream.__init__(self)
+        if shift is not None:
+            raise DeprecationWarning("use base_address instead of shift")
         self.bin = input_str
         self.offset = offset
-        self.shift = shift
+        self.base_address = base_address
         self.l = len(input_str)
 
     def _getbytes(self, start, l=1):
-        if start + l + self.shift > self.l:
+        if start + l - self.base_address > self.l:
             raise IOError("not enough bytes in str")
-        if start + self.shift < 0:
+        if start - self.base_address < 0:
             raise IOError("Negative offset")
 
-        return super(bin_stream_str, self)._getbytes(start + self.shift, l)
+        return super(bin_stream_str, self)._getbytes(start - self.base_address, l)
 
     def readbs(self, l=1):
-        if self.offset + l + self.shift > self.l:
+        if self.offset + l - self.base_address > self.l:
             raise IOError("not enough bytes in str")
-        if self.offset + self.shift < 0:
+        if self.offset - self.base_address < 0:
             raise IOError("Negative offset")
         self.offset += l
-        return self.bin[self.offset - l + self.shift:self.offset + self.shift]
+        return self.bin[self.offset - l - self.base_address:self.offset - self.base_address]
 
     def __str__(self):
-        out = self.bin[self.offset + self.shift:]
+        out = self.bin[self.offset - self.base_address:]
         return out
 
     def setoffset(self, val):
         self.offset = val
 
     def getlen(self):
-        return self.l - (self.offset + self.shift)
+        return self.l - (self.offset - self.base_address)
 
 
 class bin_stream_file(bin_stream):
 
-    def __init__(self, binary, offset=0L, shift=0):
+    def __init__(self, binary, offset=0L, base_address=0, shift=None):
         bin_stream.__init__(self)
+        if shift is not None:
+            raise DeprecationWarning("use base_address instead of shift")
         self.bin = binary
         self.bin.seek(0, 2)
-        self.shift = shift
+        self.base_address = base_address
         self.l = self.bin.tell()
         self.offset = offset
 
     def getoffset(self):
-        return self.bin.tell() - self.shift
+        return self.bin.tell() + self.base_address
 
     def setoffset(self, val):
-        self.bin.seek(val + self.shift)
+        self.bin.seek(val - self.base_address)
     offset = property(getoffset, setoffset)
 
     def readbs(self, l=1):
-        if self.offset + l + self.shift > self.l:
+        if self.offset + l - self.base_address > self.l:
             raise IOError("not enough bytes in file")
-        if self.offset + self.shift < 0:
+        if self.offset - self.base_address < 0:
             raise IOError("Negative offset")
         return self.bin.read(l)
 
@@ -222,7 +226,7 @@ class bin_stream_file(bin_stream):
         return str(self.bin)
 
     def getlen(self):
-        return self.l - (self.offset + self.shift)
+        return self.l - (self.offset - self.base_address)
 
 
 class bin_stream_container(bin_stream):