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 | 
