diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2014-12-03 10:44:30 +0100 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2014-12-03 10:44:30 +0100 |
| commit | 32156a81bd8229c735a6b914be218b0ee0ed3904 (patch) | |
| tree | 071afc6744907cb5e86d03a141a74313d4bc609e | |
| parent | a5397cee9bacc81224f786f9a62adf3de5c99c87 (diff) | |
| download | miasm-32156a81bd8229c735a6b914be218b0ee0ed3904.tar.gz miasm-32156a81bd8229c735a6b914be218b0ee0ed3904.zip | |
Add IDA bin_stream
| -rw-r--r-- | miasm2/core/bin_stream_ida.py | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/miasm2/core/bin_stream_ida.py b/miasm2/core/bin_stream_ida.py new file mode 100644 index 00000000..ff88f03e --- /dev/null +++ b/miasm2/core/bin_stream_ida.py @@ -0,0 +1,41 @@ +from idc import Byte + +from miasm2.core.bin_stream import bin_stream_str + + +class bin_stream_ida(bin_stream_str): + """ + bin_stream implementation for IDA + + IDA should provide Byte function + + Don't generate xrange using address computation: + It can raise error on overflow 7FFFFFFF with 32 bit python + """ + def getbytes(self, start, l=1): + o = "" + for ad in xrange(l): + o += chr(Byte(ad + start - self.shift)) + return o + + def readbs(self, l=1): + if self.offset + l > self.l: + raise IOError + o = self.getbytes(self.offset) + self.offset += l + return p + + def writebs(self, l=1): + raise ValueError('writebs unsupported') + + def __str__(self): + raise NotImplementedError('Not fully functional') + + def setoffset(self, val): + self.offset = val + + def __len__(self): + return 0x7FFFFFFF + + def getlen(self): + return 0x7FFFFFFF - self.offset - self.shift |