summaryrefslogtreecommitdiff
path: root/examples/python/file_extract.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/python/file_extract.py')
-rwxr-xr-xexamples/python/file_extract.py226
1 files changed, 0 insertions, 226 deletions
diff --git a/examples/python/file_extract.py b/examples/python/file_extract.py
deleted file mode 100755
index 7a617e911068..000000000000
--- a/examples/python/file_extract.py
+++ /dev/null
@@ -1,226 +0,0 @@
-#! /usr/bin/env python
-
-import string
-import struct
-import sys
-
-
-class FileExtract:
- '''Decode binary data from a file'''
-
- def __init__(self, f, b='='):
- '''Initialize with an open binary file and optional byte order'''
-
- self.file = f
- self.byte_order = b
- self.offsets = list()
-
- def set_byte_order(self, b):
- '''Set the byte order, valid values are "big", "little", "swap", "native", "<", ">", "@", "="'''
- if b == 'big':
- self.byte_order = '>'
- elif b == 'little':
- self.byte_order = '<'
- elif b == 'swap':
- # swap what ever the current byte order is
- self.byte_order = swap_unpack_char()
- elif b == 'native':
- self.byte_order = '='
- elif b == '<' or b == '>' or b == '@' or b == '=':
- self.byte_order = b
- else:
- print "error: invalid byte order specified: '%s'" % b
-
- def is_in_memory(self):
- return False
-
- def seek(self, offset, whence=0):
- if self.file:
- return self.file.seek(offset, whence)
- raise ValueError
-
- def tell(self):
- if self.file:
- return self.file.tell()
- raise ValueError
-
- def read_size(self, byte_size):
- s = self.file.read(byte_size)
- if len(s) != byte_size:
- return None
- return s
-
- def push_offset_and_seek(self, offset):
- '''Push the current file offset and seek to "offset"'''
- self.offsets.append(self.file.tell())
- self.file.seek(offset, 0)
-
- def pop_offset_and_seek(self):
- '''Pop a previously pushed file offset, or do nothing if there were no previously pushed offsets'''
- if len(self.offsets) > 0:
- self.file.seek(self.offsets.pop())
-
- def get_sint8(self, fail_value=0):
- '''Extract a single int8_t from the binary file at the current file position, returns a single integer'''
- s = self.read_size(1)
- if s:
- v, = struct.unpack(self.byte_order + 'b', s)
- return v
- else:
- return fail_value
-
- def get_uint8(self, fail_value=0):
- '''Extract a single uint8_t from the binary file at the current file position, returns a single integer'''
- s = self.read_size(1)
- if s:
- v, = struct.unpack(self.byte_order + 'B', s)
- return v
- else:
- return fail_value
-
- def get_sint16(self, fail_value=0):
- '''Extract a single int16_t from the binary file at the current file position, returns a single integer'''
- s = self.read_size(2)
- if s:
- v, = struct.unpack(self.byte_order + 'h', s)
- return v
- else:
- return fail_value
-
- def get_uint16(self, fail_value=0):
- '''Extract a single uint16_t from the binary file at the current file position, returns a single integer'''
- s = self.read_size(2)
- if s:
- v, = struct.unpack(self.byte_order + 'H', s)
- return v
- else:
- return fail_value
-
- def get_sint32(self, fail_value=0):
- '''Extract a single int32_t from the binary file at the current file position, returns a single integer'''
- s = self.read_size(4)
- if s:
- v, = struct.unpack(self.byte_order + 'i', s)
- return v
- else:
- return fail_value
-
- def get_uint32(self, fail_value=0):
- '''Extract a single uint32_t from the binary file at the current file position, returns a single integer'''
- s = self.read_size(4)
- if s:
- v, = struct.unpack(self.byte_order + 'I', s)
- return v
- else:
- return fail_value
-
- def get_sint64(self, fail_value=0):
- '''Extract a single int64_t from the binary file at the current file position, returns a single integer'''
- s = self.read_size(8)
- if s:
- v, = struct.unpack(self.byte_order + 'q', s)
- return v
- else:
- return fail_value
-
- def get_uint64(self, fail_value=0):
- '''Extract a single uint64_t from the binary file at the current file position, returns a single integer'''
- s = self.read_size(8)
- if s:
- v, = struct.unpack(self.byte_order + 'Q', s)
- return v
- else:
- return fail_value
-
- def get_fixed_length_c_string(
- self,
- n,
- fail_value='',
- isprint_only_with_space_padding=False):
- '''Extract a single fixed length C string from the binary file at the current file position, returns a single C string'''
- s = self.read_size(n)
- if s:
- cstr, = struct.unpack(self.byte_order + ("%i" % n) + 's', s)
- # Strip trialing NULLs
- cstr = string.strip(cstr, "\0")
- if isprint_only_with_space_padding:
- for c in cstr:
- if c in string.printable or ord(c) == 0:
- continue
- return fail_value
- return cstr
- else:
- return fail_value
-
- def get_c_string(self):
- '''Extract a single NULL terminated C string from the binary file at the current file position, returns a single C string'''
- cstr = ''
- byte = self.get_uint8()
- while byte != 0:
- cstr += "%c" % byte
- byte = self.get_uint8()
- return cstr
-
- def get_n_sint8(self, n, fail_value=0):
- '''Extract "n" int8_t integers from the binary file at the current file position, returns a list of integers'''
- s = self.read_size(n)
- if s:
- return struct.unpack(self.byte_order + ("%u" % n) + 'b', s)
- else:
- return (fail_value,) * n
-
- def get_n_uint8(self, n, fail_value=0):
- '''Extract "n" uint8_t integers from the binary file at the current file position, returns a list of integers'''
- s = self.read_size(n)
- if s:
- return struct.unpack(self.byte_order + ("%u" % n) + 'B', s)
- else:
- return (fail_value,) * n
-
- def get_n_sint16(self, n, fail_value=0):
- '''Extract "n" int16_t integers from the binary file at the current file position, returns a list of integers'''
- s = self.read_size(2 * n)
- if s:
- return struct.unpack(self.byte_order + ("%u" % n) + 'h', s)
- else:
- return (fail_value,) * n
-
- def get_n_uint16(self, n, fail_value=0):
- '''Extract "n" uint16_t integers from the binary file at the current file position, returns a list of integers'''
- s = self.read_size(2 * n)
- if s:
- return struct.unpack(self.byte_order + ("%u" % n) + 'H', s)
- else:
- return (fail_value,) * n
-
- def get_n_sint32(self, n, fail_value=0):
- '''Extract "n" int32_t integers from the binary file at the current file position, returns a list of integers'''
- s = self.read_size(4 * n)
- if s:
- return struct.unpack(self.byte_order + ("%u" % n) + 'i', s)
- else:
- return (fail_value,) * n
-
- def get_n_uint32(self, n, fail_value=0):
- '''Extract "n" uint32_t integers from the binary file at the current file position, returns a list of integers'''
- s = self.read_size(4 * n)
- if s:
- return struct.unpack(self.byte_order + ("%u" % n) + 'I', s)
- else:
- return (fail_value,) * n
-
- def get_n_sint64(self, n, fail_value=0):
- '''Extract "n" int64_t integers from the binary file at the current file position, returns a list of integers'''
- s = self.read_size(8 * n)
- if s:
- return struct.unpack(self.byte_order + ("%u" % n) + 'q', s)
- else:
- return (fail_value,) * n
-
- def get_n_uint64(self, n, fail_value=0):
- '''Extract "n" uint64_t integers from the binary file at the current file position, returns a list of integers'''
- s = self.read_size(8 * n)
- if s:
- return struct.unpack(self.byte_order + ("%u" % n) + 'Q', s)
- else:
- return (fail_value,) * n