diff options
| author | Andrew Lamoureux <andrew@vector35.com> | 2019-03-18 17:34:09 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2019-03-20 13:00:17 -0400 |
| commit | 815f5485eb50eff3b483a6bcc0c3d3d11569f8ca (patch) | |
| tree | 5128136ac86971ed8729e8c19cb00bcf8f220acc /python/examples/kaitai/kaitai_struct_formats/firmware | |
| parent | 8e9322ed8b5826dd62bc931d83e0828d42f7969f (diff) | |
kaitai: all formats compiled and included
Diffstat (limited to 'python/examples/kaitai/kaitai_struct_formats/firmware')
4 files changed, 491 insertions, 0 deletions
diff --git a/python/examples/kaitai/kaitai_struct_formats/firmware/__init__.py b/python/examples/kaitai/kaitai_struct_formats/firmware/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/python/examples/kaitai/kaitai_struct_formats/firmware/__init__.py diff --git a/python/examples/kaitai/kaitai_struct_formats/firmware/andes_firmware.py b/python/examples/kaitai/kaitai_struct_formats/firmware/andes_firmware.py new file mode 100644 index 00000000..b032da33 --- /dev/null +++ b/python/examples/kaitai/kaitai_struct_formats/firmware/andes_firmware.py @@ -0,0 +1,64 @@ +from __future__ import absolute_import +# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild + +from pkg_resources import parse_version +from ...kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO +import collections + + +if parse_version(ks_version) < parse_version('0.7'): + raise Exception("Incompatible Kaitai Struct Python API: 0.7 or later is required, but you have %s" % (ks_version)) + +class AndesFirmware(KaitaiStruct): + """Firmware image found with MediaTek MT76xx wifi chipsets.""" + SEQ_FIELDS = ["image_header", "ilm", "dlm"] + def __init__(self, _io, _parent=None, _root=None): + self._io = _io + self._parent = _parent + self._root = _root if _root else self + self._debug = collections.defaultdict(dict) + + def _read(self): + self._debug['image_header']['start'] = self._io.pos() + self._raw_image_header = self._io.read_bytes(32) + io = KaitaiStream(BytesIO(self._raw_image_header)) + self.image_header = self._root.ImageHeader(io, self, self._root) + self.image_header._read() + self._debug['image_header']['end'] = self._io.pos() + self._debug['ilm']['start'] = self._io.pos() + self.ilm = self._io.read_bytes(self.image_header.ilm_len) + self._debug['ilm']['end'] = self._io.pos() + self._debug['dlm']['start'] = self._io.pos() + self.dlm = self._io.read_bytes(self.image_header.dlm_len) + self._debug['dlm']['end'] = self._io.pos() + + class ImageHeader(KaitaiStruct): + SEQ_FIELDS = ["ilm_len", "dlm_len", "fw_ver", "build_ver", "extra", "build_time"] + def __init__(self, _io, _parent=None, _root=None): + self._io = _io + self._parent = _parent + self._root = _root if _root else self + self._debug = collections.defaultdict(dict) + + def _read(self): + self._debug['ilm_len']['start'] = self._io.pos() + self.ilm_len = self._io.read_u4le() + self._debug['ilm_len']['end'] = self._io.pos() + self._debug['dlm_len']['start'] = self._io.pos() + self.dlm_len = self._io.read_u4le() + self._debug['dlm_len']['end'] = self._io.pos() + self._debug['fw_ver']['start'] = self._io.pos() + self.fw_ver = self._io.read_u2le() + self._debug['fw_ver']['end'] = self._io.pos() + self._debug['build_ver']['start'] = self._io.pos() + self.build_ver = self._io.read_u2le() + self._debug['build_ver']['end'] = self._io.pos() + self._debug['extra']['start'] = self._io.pos() + self.extra = self._io.read_u4le() + self._debug['extra']['end'] = self._io.pos() + self._debug['build_time']['start'] = self._io.pos() + self.build_time = (self._io.read_bytes(16)).decode(u"UTF-8") + self._debug['build_time']['end'] = self._io.pos() + + + diff --git a/python/examples/kaitai/kaitai_struct_formats/firmware/ines.py b/python/examples/kaitai/kaitai_struct_formats/firmware/ines.py new file mode 100644 index 00000000..e9c97d29 --- /dev/null +++ b/python/examples/kaitai/kaitai_struct_formats/firmware/ines.py @@ -0,0 +1,278 @@ +from __future__ import absolute_import +# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild + +from pkg_resources import parse_version +from ...kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO +import collections +from enum import Enum + + +if parse_version(ks_version) < parse_version('0.7'): + raise Exception("Incompatible Kaitai Struct Python API: 0.7 or later is required, but you have %s" % (ks_version)) + +class Ines(KaitaiStruct): + """ + .. seealso:: + Source - https://wiki.nesdev.com/w/index.php/INES + """ + SEQ_FIELDS = ["header", "trainer", "prg_rom", "chr_rom", "playchoice10", "title"] + def __init__(self, _io, _parent=None, _root=None): + self._io = _io + self._parent = _parent + self._root = _root if _root else self + self._debug = collections.defaultdict(dict) + + def _read(self): + self._debug['header']['start'] = self._io.pos() + self._raw_header = self._io.read_bytes(16) + io = KaitaiStream(BytesIO(self._raw_header)) + self.header = self._root.Header(io, self, self._root) + self.header._read() + self._debug['header']['end'] = self._io.pos() + if self.header.f6.trainer: + self._debug['trainer']['start'] = self._io.pos() + self.trainer = self._io.read_bytes(512) + self._debug['trainer']['end'] = self._io.pos() + + self._debug['prg_rom']['start'] = self._io.pos() + self.prg_rom = self._io.read_bytes((self.header.len_prg_rom * 16384)) + self._debug['prg_rom']['end'] = self._io.pos() + self._debug['chr_rom']['start'] = self._io.pos() + self.chr_rom = self._io.read_bytes((self.header.len_chr_rom * 8192)) + self._debug['chr_rom']['end'] = self._io.pos() + if self.header.f7.playchoice10: + self._debug['playchoice10']['start'] = self._io.pos() + self.playchoice10 = self._root.Playchoice10(self._io, self, self._root) + self.playchoice10._read() + self._debug['playchoice10']['end'] = self._io.pos() + + if not (self._io.is_eof()): + self._debug['title']['start'] = self._io.pos() + self.title = (self._io.read_bytes_full()).decode(u"ASCII") + self._debug['title']['end'] = self._io.pos() + + + class Header(KaitaiStruct): + SEQ_FIELDS = ["magic", "len_prg_rom", "len_chr_rom", "f6", "f7", "len_prg_ram", "f9", "f10", "reserved"] + def __init__(self, _io, _parent=None, _root=None): + self._io = _io + self._parent = _parent + self._root = _root if _root else self + self._debug = collections.defaultdict(dict) + + def _read(self): + self._debug['magic']['start'] = self._io.pos() + self.magic = self._io.ensure_fixed_contents(b"\x4E\x45\x53\x1A") + self._debug['magic']['end'] = self._io.pos() + self._debug['len_prg_rom']['start'] = self._io.pos() + self.len_prg_rom = self._io.read_u1() + self._debug['len_prg_rom']['end'] = self._io.pos() + self._debug['len_chr_rom']['start'] = self._io.pos() + self.len_chr_rom = self._io.read_u1() + self._debug['len_chr_rom']['end'] = self._io.pos() + self._debug['f6']['start'] = self._io.pos() + self._raw_f6 = self._io.read_bytes(1) + io = KaitaiStream(BytesIO(self._raw_f6)) + self.f6 = self._root.Header.F6(io, self, self._root) + self.f6._read() + self._debug['f6']['end'] = self._io.pos() + self._debug['f7']['start'] = self._io.pos() + self._raw_f7 = self._io.read_bytes(1) + io = KaitaiStream(BytesIO(self._raw_f7)) + self.f7 = self._root.Header.F7(io, self, self._root) + self.f7._read() + self._debug['f7']['end'] = self._io.pos() + self._debug['len_prg_ram']['start'] = self._io.pos() + self.len_prg_ram = self._io.read_u1() + self._debug['len_prg_ram']['end'] = self._io.pos() + self._debug['f9']['start'] = self._io.pos() + self._raw_f9 = self._io.read_bytes(1) + io = KaitaiStream(BytesIO(self._raw_f9)) + self.f9 = self._root.Header.F9(io, self, self._root) + self.f9._read() + self._debug['f9']['end'] = self._io.pos() + self._debug['f10']['start'] = self._io.pos() + self._raw_f10 = self._io.read_bytes(1) + io = KaitaiStream(BytesIO(self._raw_f10)) + self.f10 = self._root.Header.F10(io, self, self._root) + self.f10._read() + self._debug['f10']['end'] = self._io.pos() + self._debug['reserved']['start'] = self._io.pos() + self.reserved = self._io.ensure_fixed_contents(b"\x00\x00\x00\x00\x00") + self._debug['reserved']['end'] = self._io.pos() + + class F6(KaitaiStruct): + """ + .. seealso:: + Source - https://wiki.nesdev.com/w/index.php/INES#Flags_6 + """ + + class Mirroring(Enum): + horizontal = 0 + vertical = 1 + SEQ_FIELDS = ["lower_mapper", "four_screen", "trainer", "has_battery_ram", "mirroring"] + def __init__(self, _io, _parent=None, _root=None): + self._io = _io + self._parent = _parent + self._root = _root if _root else self + self._debug = collections.defaultdict(dict) + + def _read(self): + self._debug['lower_mapper']['start'] = self._io.pos() + self.lower_mapper = self._io.read_bits_int(4) + self._debug['lower_mapper']['end'] = self._io.pos() + self._debug['four_screen']['start'] = self._io.pos() + self.four_screen = self._io.read_bits_int(1) != 0 + self._debug['four_screen']['end'] = self._io.pos() + self._debug['trainer']['start'] = self._io.pos() + self.trainer = self._io.read_bits_int(1) != 0 + self._debug['trainer']['end'] = self._io.pos() + self._debug['has_battery_ram']['start'] = self._io.pos() + self.has_battery_ram = self._io.read_bits_int(1) != 0 + self._debug['has_battery_ram']['end'] = self._io.pos() + self._debug['mirroring']['start'] = self._io.pos() + self.mirroring = KaitaiStream.resolve_enum(self._root.Header.F6.Mirroring, self._io.read_bits_int(1)) + self._debug['mirroring']['end'] = self._io.pos() + + + class F7(KaitaiStruct): + """ + .. seealso:: + Source - https://wiki.nesdev.com/w/index.php/INES#Flags_7 + """ + SEQ_FIELDS = ["upper_mapper", "format", "playchoice10", "vs_unisystem"] + def __init__(self, _io, _parent=None, _root=None): + self._io = _io + self._parent = _parent + self._root = _root if _root else self + self._debug = collections.defaultdict(dict) + + def _read(self): + self._debug['upper_mapper']['start'] = self._io.pos() + self.upper_mapper = self._io.read_bits_int(4) + self._debug['upper_mapper']['end'] = self._io.pos() + self._debug['format']['start'] = self._io.pos() + self.format = self._io.read_bits_int(2) + self._debug['format']['end'] = self._io.pos() + self._debug['playchoice10']['start'] = self._io.pos() + self.playchoice10 = self._io.read_bits_int(1) != 0 + self._debug['playchoice10']['end'] = self._io.pos() + self._debug['vs_unisystem']['start'] = self._io.pos() + self.vs_unisystem = self._io.read_bits_int(1) != 0 + self._debug['vs_unisystem']['end'] = self._io.pos() + + + class F9(KaitaiStruct): + """ + .. seealso:: + Source - https://wiki.nesdev.com/w/index.php/INES#Flags_9 + """ + + class TvSystem(Enum): + ntsc = 0 + pal = 1 + SEQ_FIELDS = ["reserved", "tv_system"] + def __init__(self, _io, _parent=None, _root=None): + self._io = _io + self._parent = _parent + self._root = _root if _root else self + self._debug = collections.defaultdict(dict) + + def _read(self): + self._debug['reserved']['start'] = self._io.pos() + self.reserved = self._io.read_bits_int(7) + self._debug['reserved']['end'] = self._io.pos() + self._debug['tv_system']['start'] = self._io.pos() + self.tv_system = KaitaiStream.resolve_enum(self._root.Header.F9.TvSystem, self._io.read_bits_int(1)) + self._debug['tv_system']['end'] = self._io.pos() + + + class F10(KaitaiStruct): + """ + .. seealso:: + Source - https://wiki.nesdev.com/w/index.php/INES#Flags_10 + """ + + class TvSystem(Enum): + ntsc = 0 + dual1 = 1 + pal = 2 + dual2 = 3 + SEQ_FIELDS = ["reserved1", "bus_conflict", "prg_ram", "reserved2", "tv_system"] + def __init__(self, _io, _parent=None, _root=None): + self._io = _io + self._parent = _parent + self._root = _root if _root else self + self._debug = collections.defaultdict(dict) + + def _read(self): + self._debug['reserved1']['start'] = self._io.pos() + self.reserved1 = self._io.read_bits_int(2) + self._debug['reserved1']['end'] = self._io.pos() + self._debug['bus_conflict']['start'] = self._io.pos() + self.bus_conflict = self._io.read_bits_int(1) != 0 + self._debug['bus_conflict']['end'] = self._io.pos() + self._debug['prg_ram']['start'] = self._io.pos() + self.prg_ram = self._io.read_bits_int(1) != 0 + self._debug['prg_ram']['end'] = self._io.pos() + self._debug['reserved2']['start'] = self._io.pos() + self.reserved2 = self._io.read_bits_int(2) + self._debug['reserved2']['end'] = self._io.pos() + self._debug['tv_system']['start'] = self._io.pos() + self.tv_system = KaitaiStream.resolve_enum(self._root.Header.F10.TvSystem, self._io.read_bits_int(2)) + self._debug['tv_system']['end'] = self._io.pos() + + + @property + def mapper(self): + """ + .. seealso:: + Source - https://wiki.nesdev.com/w/index.php/Mapper + """ + if hasattr(self, '_m_mapper'): + return self._m_mapper if hasattr(self, '_m_mapper') else None + + self._m_mapper = (self.f6.lower_mapper | (self.f7.upper_mapper << 4)) + return self._m_mapper if hasattr(self, '_m_mapper') else None + + + class Playchoice10(KaitaiStruct): + """ + .. seealso:: + Source - http://wiki.nesdev.com/w/index.php/PC10_ROM-Images + """ + SEQ_FIELDS = ["inst_rom", "prom"] + def __init__(self, _io, _parent=None, _root=None): + self._io = _io + self._parent = _parent + self._root = _root if _root else self + self._debug = collections.defaultdict(dict) + + def _read(self): + self._debug['inst_rom']['start'] = self._io.pos() + self.inst_rom = self._io.read_bytes(8192) + self._debug['inst_rom']['end'] = self._io.pos() + self._debug['prom']['start'] = self._io.pos() + self.prom = self._root.Playchoice10.Prom(self._io, self, self._root) + self.prom._read() + self._debug['prom']['end'] = self._io.pos() + + class Prom(KaitaiStruct): + SEQ_FIELDS = ["data", "counter_out"] + def __init__(self, _io, _parent=None, _root=None): + self._io = _io + self._parent = _parent + self._root = _root if _root else self + self._debug = collections.defaultdict(dict) + + def _read(self): + self._debug['data']['start'] = self._io.pos() + self.data = self._io.read_bytes(16) + self._debug['data']['end'] = self._io.pos() + self._debug['counter_out']['start'] = self._io.pos() + self.counter_out = self._io.read_bytes(16) + self._debug['counter_out']['end'] = self._io.pos() + + + + diff --git a/python/examples/kaitai/kaitai_struct_formats/firmware/uimage.py b/python/examples/kaitai/kaitai_struct_formats/firmware/uimage.py new file mode 100644 index 00000000..fb5b31f3 --- /dev/null +++ b/python/examples/kaitai/kaitai_struct_formats/firmware/uimage.py @@ -0,0 +1,149 @@ +from __future__ import absolute_import +# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild + +from pkg_resources import parse_version +from ...kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO +from enum import Enum +import collections + + +if parse_version(ks_version) < parse_version('0.7'): + raise Exception("Incompatible Kaitai Struct Python API: 0.7 or later is required, but you have %s" % (ks_version)) + +class Uimage(KaitaiStruct): + """The new uImage format allows more flexibility in handling images of various + types (kernel, ramdisk, etc.), it also enhances integrity protection of images + with sha1 and md5 checksums. + + .. seealso:: + Source - https://github.com/EmcraftSystems/u-boot/blob/master/include/image.h + """ + + class UimageOs(Enum): + invalid = 0 + openbsd = 1 + netbsd = 2 + freebsd = 3 + bsd4_4 = 4 + linux = 5 + svr4 = 6 + esix = 7 + solaris = 8 + irix = 9 + sco = 10 + dell = 11 + ncr = 12 + lynxos = 13 + vxworks = 14 + psos = 15 + qnx = 16 + u_boot = 17 + rtems = 18 + artos = 19 + unity = 20 + integrity = 21 + + class UimageArch(Enum): + invalid = 0 + alpha = 1 + arm = 2 + i386 = 3 + ia64 = 4 + mips = 5 + mips64 = 6 + ppc = 7 + s390 = 8 + sh = 9 + sparc = 10 + sparc64 = 11 + m68k = 12 + nios = 13 + microblaze = 14 + nios2 = 15 + blackfin = 16 + avr32 = 17 + st200 = 18 + + class UimageComp(Enum): + none = 0 + gzip = 1 + bzip2 = 2 + lzma = 3 + lzo = 4 + + class UimageType(Enum): + invalid = 0 + standalone = 1 + kernel = 2 + ramdisk = 3 + multi = 4 + firmware = 5 + script = 6 + filesystem = 7 + flatdt = 8 + kwbimage = 9 + imximage = 10 + SEQ_FIELDS = ["header", "data"] + def __init__(self, _io, _parent=None, _root=None): + self._io = _io + self._parent = _parent + self._root = _root if _root else self + self._debug = collections.defaultdict(dict) + + def _read(self): + self._debug['header']['start'] = self._io.pos() + self.header = self._root.Uheader(self._io, self, self._root) + self.header._read() + self._debug['header']['end'] = self._io.pos() + self._debug['data']['start'] = self._io.pos() + self.data = self._io.read_bytes(self.header.len_image) + self._debug['data']['end'] = self._io.pos() + + class Uheader(KaitaiStruct): + SEQ_FIELDS = ["magic", "header_crc", "timestamp", "len_image", "load_address", "entry_address", "data_crc", "os_type", "architecture", "image_type", "compression_type", "name"] + def __init__(self, _io, _parent=None, _root=None): + self._io = _io + self._parent = _parent + self._root = _root if _root else self + self._debug = collections.defaultdict(dict) + + def _read(self): + self._debug['magic']['start'] = self._io.pos() + self.magic = self._io.ensure_fixed_contents(b"\x27\x05\x19\x56") + self._debug['magic']['end'] = self._io.pos() + self._debug['header_crc']['start'] = self._io.pos() + self.header_crc = self._io.read_u4be() + self._debug['header_crc']['end'] = self._io.pos() + self._debug['timestamp']['start'] = self._io.pos() + self.timestamp = self._io.read_u4be() + self._debug['timestamp']['end'] = self._io.pos() + self._debug['len_image']['start'] = self._io.pos() + self.len_image = self._io.read_u4be() + self._debug['len_image']['end'] = self._io.pos() + self._debug['load_address']['start'] = self._io.pos() + self.load_address = self._io.read_u4be() + self._debug['load_address']['end'] = self._io.pos() + self._debug['entry_address']['start'] = self._io.pos() + self.entry_address = self._io.read_u4be() + self._debug['entry_address']['end'] = self._io.pos() + self._debug['data_crc']['start'] = self._io.pos() + self.data_crc = self._io.read_u4be() + self._debug['data_crc']['end'] = self._io.pos() + self._debug['os_type']['start'] = self._io.pos() + self.os_type = KaitaiStream.resolve_enum(self._root.UimageOs, self._io.read_u1()) + self._debug['os_type']['end'] = self._io.pos() + self._debug['architecture']['start'] = self._io.pos() + self.architecture = KaitaiStream.resolve_enum(self._root.UimageArch, self._io.read_u1()) + self._debug['architecture']['end'] = self._io.pos() + self._debug['image_type']['start'] = self._io.pos() + self.image_type = KaitaiStream.resolve_enum(self._root.UimageType, self._io.read_u1()) + self._debug['image_type']['end'] = self._io.pos() + self._debug['compression_type']['start'] = self._io.pos() + self.compression_type = KaitaiStream.resolve_enum(self._root.UimageComp, self._io.read_u1()) + self._debug['compression_type']['end'] = self._io.pos() + self._debug['name']['start'] = self._io.pos() + self.name = (KaitaiStream.bytes_terminate(self._io.read_bytes(32), 0, False)).decode(u"UTF-8") + self._debug['name']['end'] = self._io.pos() + + + |
