diff options
Diffstat (limited to 'examples/python/file_extract.py')
-rwxr-xr-x | examples/python/file_extract.py | 226 |
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 |