From a2d0b2cd66639e983b5a4fb191d8afe5cac77855 Mon Sep 17 00:00:00 2001 From: Andrew Lamoureux Date: Wed, 20 Mar 2019 15:35:00 -0400 Subject: kaitai: more format compatibility, testing --- python/examples/kaitai/__main__.py | 60 ++++++++++++---------- python/examples/kaitai/dex.py | 2 +- python/examples/kaitai/dicom.py | 2 +- python/examples/kaitai/ethernet_frame.py | 8 +-- python/examples/kaitai/exif.py | 4 +- python/examples/kaitai/google_protobuf.py | 2 +- python/examples/kaitai/ipv4_packet.py | 4 +- python/examples/kaitai/ipv6_packet.py | 4 +- python/examples/kaitai/jpeg.py | 2 +- .../kaitai/microsoft_network_monitor_v2.py | 8 +-- python/examples/kaitai/openpgp_message.py | 18 +++---- python/examples/kaitai/packet_ppi.py | 4 +- python/examples/kaitai/pcap.py | 8 +-- python/examples/kaitai/pcx_dcx.py | 2 +- python/examples/kaitai/protocol_body.py | 20 ++++---- python/examples/kaitai/regf.py | 19 ------- python/examples/kaitai/sqlite3.py | 2 +- python/examples/kaitai/standard_midi_file.py | 2 +- python/examples/kaitai/warcraft_2_pud.py | 2 +- python/examples/kaitai/windows_lnk_file.py | 2 +- 20 files changed, 80 insertions(+), 95 deletions(-) (limited to 'python/examples') diff --git a/python/examples/kaitai/__main__.py b/python/examples/kaitai/__main__.py index b52f01cf..2541ef0c 100755 --- a/python/examples/kaitai/__main__.py +++ b/python/examples/kaitai/__main__.py @@ -118,36 +118,40 @@ if __name__ == '__main__': print('importing every format...') module_names = [ - 'cpio_old_le', 'gzip', 'lzh', 'rar', 'zip', 'monomakh_sapr_chg', 'bcd', - 'vlq_base128_be', 'vlq_base128_le', 'dbf', 'gettext_mo', 'sqlite3', 'tsm', - 'dex', 'dos_mz', 'elf', 'java_class', 'mach_o', 'microsoft_pe', - 'python_pyc_27', 'swf', 'apm_partition_table', 'apple_single_double', 'cramfs', - 'ext2', 'gpt_partition_table', 'iso9660', 'luks', 'lvm2', - 'mbr_partition_table', 'tr_dos_image', 'vdi', 'vfat', 'vmware_vmdk', - 'andes_firmware', 'ines', 'uimage', 'ttf', 'allegro_dat', 'doom_wad', - 'dune_2_pak', 'fallout2_dat', 'fallout_dat', 'ftl_dat', 'gran_turismo_vol', - 'heaps_pak', 'heroes_of_might_and_magic_agg', 'heroes_of_might_and_magic_bmp', - 'quake_mdl', 'quake_pak', 'renderware_binary_stream', 'saints_row_2_vpp_pc', - 'warcraft_2_pud', 'shapefile_index', 'shapefile_main', 'edid', - 'mifare_classic', 'bmp', 'dicom', 'exif', 'exif_be', 'exif_le', 'gif', 'icc_4', - 'ico', 'jpeg', 'pcx', 'pcx_dcx', 'png', 'psx_tim', 'tga', 'wmf', 'xwd', - 'aix_utmp', 'glibc_utmp', 'systemd_journal', 'windows_evt_log', 'code_6502', - 'avi', 'blender_blend', 'creative_voice_file', 'genmidi_op2', 'id3v1_1', - 'id3v2_3', 'id3v2_4', 'magicavoxel_vox', 'ogg', 'quicktime_mov', - 'standard_midi_file', 'stl', 'fasttracker_xm_module', 's3m', 'vp8_ivf', 'wav', - 'bitcoin_transaction', 'dns_packet', 'ethernet_frame', 'hccap', 'hccapx', - 'icmp_packet', 'ipv4_packet', 'ipv6_packet', 'microsoft_network_monitor_v2', - 'packet_ppi', 'pcap', 'protocol_body', 'rtcp_payload', 'rtp_packet', - 'tcp_segment', 'tls_client_hello', 'udp_datagram', 'nt_mdt', 'nt_mdt_pal', - 'avantes_roh60', 'specpr', 'openpgp_message', 'ssh_public_key', 'asn1_der', - 'bson', 'google_protobuf', 'microsoft_cfb', 'msgpack', 'ruby_marshal', 'regf', - 'windows_lnk_file', 'windows_minidump', 'windows_resource_file', - 'windows_shell_items', 'windows_systemtime' + 'aix_utmp', 'allegro_dat', 'andes_firmware', 'apm_partition_table', + 'apple_single_double', 'asn1_der', 'avantes_roh60', 'avi', 'bcd', + 'bitcoin_transaction', 'blender_blend', 'bmp', 'bson', 'code_6502', 'cpio_old_le', + 'cramfs', 'creative_voice_file', 'dbf', 'dex', 'dicom', 'dns_packet', 'doom_wad', + 'dos_mz', 'dune_2_pak', 'edid', 'elf', 'exif', 'exif_be', 'exif_le', + 'ext2', 'fallout2_dat', 'fallout_dat', 'fasttracker_xm_module', 'ftl_dat', + 'genmidi_op2', 'gettext_mo', 'gif', 'glibc_utmp', 'google_protobuf', + 'gpt_partition_table', 'gran_turismo_vol', 'gzip', 'hccap', 'hccapx', 'heaps_pak', + 'heroes_of_might_and_magic_agg', 'heroes_of_might_and_magic_bmp', 'icc_4', + 'icmp_packet', 'ico', 'id3v1_1', 'id3v2_3', 'id3v2_4', 'ines', + 'iso9660', 'java_class', 'jpeg', 'luks', 'lvm2', 'lzh', 'mach_o', + 'magicavoxel_vox', 'mbr_partition_table', 'microsoft_cfb', + 'microsoft_pe', 'mifare_classic', + 'monomakh_sapr_chg', 'msgpack', 'nt_mdt', 'nt_mdt_pal', 'ogg', 'openpgp_message', + 'pcx', 'pcx_dcx', 'png', 'psx_tim', + 'python_pyc_27', 'quake_mdl', 'quake_pak', 'quicktime_mov', 'rar', 'regf', + 'renderware_binary_stream', 'rtcp_payload', 'rtp_packet', 'ruby_marshal', 's3m', + 'saints_row_2_vpp_pc', 'shapefile_index', 'shapefile_main', 'specpr', 'sqlite3', + 'ssh_public_key', 'standard_midi_file', 'stl', 'swf', 'systemd_journal', + 'tcp_segment', 'tga', 'tls_client_hello', 'tr_dos_image', 'tsm', 'ttf', + 'udp_datagram', 'uimage', 'vdi', 'vfat', 'vlq_base128_be', 'vlq_base128_le', + 'vmware_vmdk', 'vp8_ivf', 'warcraft_2_pud', 'wav', 'windows_evt_log', + 'windows_lnk_file', 'windows_minidump', 'windows_resource_file', + 'windows_shell_items', 'windows_systemtime', 'wmf', 'xwd', 'zip', ] + if sys.version_info[0] == 3: + module_names += ['ipv4_packet', 'ipv6_packet', 'protocol_body', + 'microsoft_network_monitor_v2', 'packet_ppi', 'pcap', + 'ethernet_frame'] + (npass, nfail) = (0,0) - for module_name in module_names: + for module_name in sorted(module_names): class_name = ''.join(map(lambda x: x.capitalize(), module_name.split('_'))) print('from %s import %s...' % (module_name, class_name), end='') @@ -162,8 +166,8 @@ if __name__ == '__main__': ntests = 1.0*npass + nfail assert(ntests == len(module_names)) - print('passes %d of %d (rate: %f%%)' % (npass, ntests, npass/ntests)) - print('failures %d of %d (rate: %f%%)' % (nfail, ntests, nfail/ntests)) + print('passes %d of %d (rate: %0.1f%%)' % (npass, ntests, 100*npass/ntests)) + print('failures %d of %d (rate: %0.1f%%)' % (nfail, ntests, 100*nfail/ntests)) if cmd == 'dumpbinja': fpath = sys.argv[2] diff --git a/python/examples/kaitai/dex.py b/python/examples/kaitai/dex.py index f2dad696..b90441bc 100644 --- a/python/examples/kaitai/dex.py +++ b/python/examples/kaitai/dex.py @@ -9,7 +9,7 @@ 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)) -from vlq_base128_le import VlqBase128Le +from .vlq_base128_le import VlqBase128Le class Dex(KaitaiStruct): """Android OS applications executables are typically stored in its own format, optimized for more efficient execution in Dalvik virtual diff --git a/python/examples/kaitai/dicom.py b/python/examples/kaitai/dicom.py index 2bba1910..4aa2d592 100644 --- a/python/examples/kaitai/dicom.py +++ b/python/examples/kaitai/dicom.py @@ -1774,7 +1774,7 @@ class Dicom(KaitaiStruct): alpha_lut_transfer_function = 2626576 icc_profile = 2629632 color_space = 2629634 - lossy_image_compression = 2629904 + lossy_image_compression_ = 2629904 lossy_image_compression_ratio = 2629906 lossy_image_compression_method = 2629908 modality_lut_sequence = 2633728 diff --git a/python/examples/kaitai/ethernet_frame.py b/python/examples/kaitai/ethernet_frame.py index e90c43c7..adbe60de 100644 --- a/python/examples/kaitai/ethernet_frame.py +++ b/python/examples/kaitai/ethernet_frame.py @@ -9,8 +9,8 @@ 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)) -from ipv4_packet import Ipv4Packet -from ipv6_packet import Ipv6Packet +from . import ipv4_packet +from . import ipv6_packet class EthernetFrame(KaitaiStruct): """Ethernet frame is a OSI data link layer (layer 2) protocol data unit for Ethernet networks. In practice, many other networks and/or @@ -51,12 +51,12 @@ class EthernetFrame(KaitaiStruct): if _on == self._root.EtherTypeEnum.ipv4: self._raw_body = self._io.read_bytes_full() io = KaitaiStream(BytesIO(self._raw_body)) - self.body = Ipv4Packet(io) + self.body = ipv4_packet.Ipv4Packet(io) self.body._read() elif _on == self._root.EtherTypeEnum.ipv6: self._raw_body = self._io.read_bytes_full() io = KaitaiStream(BytesIO(self._raw_body)) - self.body = Ipv6Packet(io) + self.body = ipv6_packet.Ipv6Packet(io) self.body._read() else: self.body = self._io.read_bytes_full() diff --git a/python/examples/kaitai/exif.py b/python/examples/kaitai/exif.py index f0a27b70..134ab3f6 100644 --- a/python/examples/kaitai/exif.py +++ b/python/examples/kaitai/exif.py @@ -8,8 +8,8 @@ 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)) -from exif_le import ExifLe -from exif_be import ExifBe +from .exif_le import ExifLe +from .exif_be import ExifBe class Exif(KaitaiStruct): SEQ_FIELDS = ["endianness", "body"] def __init__(self, _io, _parent=None, _root=None): diff --git a/python/examples/kaitai/google_protobuf.py b/python/examples/kaitai/google_protobuf.py index 27b4b2ef..74d8020e 100644 --- a/python/examples/kaitai/google_protobuf.py +++ b/python/examples/kaitai/google_protobuf.py @@ -9,7 +9,7 @@ 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)) -from vlq_base128_le import VlqBase128Le +from .vlq_base128_le import VlqBase128Le class GoogleProtobuf(KaitaiStruct): """Google Protocol Buffers (AKA protobuf) is a popular data serialization scheme used for communication protocols, data storage, diff --git a/python/examples/kaitai/ipv4_packet.py b/python/examples/kaitai/ipv4_packet.py index ffc83f92..4ed02a64 100644 --- a/python/examples/kaitai/ipv4_packet.py +++ b/python/examples/kaitai/ipv4_packet.py @@ -8,7 +8,7 @@ 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)) -from protocol_body import ProtocolBody +from . import protocol_body class Ipv4Packet(KaitaiStruct): SEQ_FIELDS = ["b1", "b2", "total_length", "identification", "b67", "ttl", "protocol", "header_checksum", "src_ip_addr", "dst_ip_addr", "options", "body"] def __init__(self, _io, _parent=None, _root=None): @@ -57,7 +57,7 @@ class Ipv4Packet(KaitaiStruct): self._debug['body']['start'] = self._io.pos() self._raw_body = self._io.read_bytes((self.total_length - self.ihl_bytes)) io = KaitaiStream(BytesIO(self._raw_body)) - self.body = ProtocolBody(self.protocol, io) + self.body = protocol_body.ProtocolBody(self.protocol, io) self.body._read() self._debug['body']['end'] = self._io.pos() diff --git a/python/examples/kaitai/ipv6_packet.py b/python/examples/kaitai/ipv6_packet.py index 3d828e64..70bac74f 100644 --- a/python/examples/kaitai/ipv6_packet.py +++ b/python/examples/kaitai/ipv6_packet.py @@ -8,7 +8,7 @@ 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)) -from protocol_body import ProtocolBody +from . import protocol_body class Ipv6Packet(KaitaiStruct): SEQ_FIELDS = ["version", "traffic_class", "flow_label", "payload_length", "next_header_type", "hop_limit", "src_ipv6_addr", "dst_ipv6_addr", "next_header", "rest"] def __init__(self, _io, _parent=None, _root=None): @@ -44,7 +44,7 @@ class Ipv6Packet(KaitaiStruct): self.dst_ipv6_addr = self._io.read_bytes(16) self._debug['dst_ipv6_addr']['end'] = self._io.pos() self._debug['next_header']['start'] = self._io.pos() - self.next_header = ProtocolBody(self.next_header_type, self._io) + self.next_header = protocol_body.ProtocolBody(self.next_header_type, self._io) self.next_header._read() self._debug['next_header']['end'] = self._io.pos() self._debug['rest']['start'] = self._io.pos() diff --git a/python/examples/kaitai/jpeg.py b/python/examples/kaitai/jpeg.py index 6fd5bcb0..54c28bb6 100644 --- a/python/examples/kaitai/jpeg.py +++ b/python/examples/kaitai/jpeg.py @@ -9,7 +9,7 @@ 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)) -from exif import Exif +from .exif import Exif class Jpeg(KaitaiStruct): class ComponentId(Enum): diff --git a/python/examples/kaitai/microsoft_network_monitor_v2.py b/python/examples/kaitai/microsoft_network_monitor_v2.py index 3d0a14f6..be145e11 100644 --- a/python/examples/kaitai/microsoft_network_monitor_v2.py +++ b/python/examples/kaitai/microsoft_network_monitor_v2.py @@ -9,8 +9,8 @@ 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)) -from windows_systemtime import WindowsSystemtime -from ethernet_frame import EthernetFrame +from . import windows_systemtime +from . import ethernet_frame class MicrosoftNetworkMonitorV2(KaitaiStruct): """Microsoft Network Monitor (AKA Netmon) is a proprietary Microsoft's network packet sniffing and analysis tool. It can save captured @@ -151,7 +151,7 @@ class MicrosoftNetworkMonitorV2(KaitaiStruct): self.mac_type = KaitaiStream.resolve_enum(self._root.Linktype, self._io.read_u2le()) self._debug['mac_type']['end'] = self._io.pos() self._debug['time_capture_start']['start'] = self._io.pos() - self.time_capture_start = WindowsSystemtime(self._io) + self.time_capture_start = windows_systemtime.WindowsSystemtime(self._io) self.time_capture_start._read() self._debug['time_capture_start']['end'] = self._io.pos() self._debug['frame_table_ofs']['start'] = self._io.pos() @@ -279,7 +279,7 @@ class MicrosoftNetworkMonitorV2(KaitaiStruct): if _on == self._root.Linktype.ethernet: self._raw_body = self._io.read_bytes(self.inc_len) io = KaitaiStream(BytesIO(self._raw_body)) - self.body = EthernetFrame(io) + self.body = ethernet_frame.EthernetFrame(io) self.body._read() else: self.body = self._io.read_bytes(self.inc_len) diff --git a/python/examples/kaitai/openpgp_message.py b/python/examples/kaitai/openpgp_message.py index f68af285..3b10b5bc 100644 --- a/python/examples/kaitai/openpgp_message.py +++ b/python/examples/kaitai/openpgp_message.py @@ -152,26 +152,26 @@ class OpenpgpMessage(KaitaiStruct): private_experimental_algorithm_10 = 110 class SubpacketTypes(Enum): - reserved = 0 - reserved = 1 + reserved0 = 0 + reserved1 = 1 signature_creation_time = 2 signature_expiration_time = 3 exportable_certification = 4 trust_signature = 5 regular_expression = 6 revocable = 7 - reserved = 8 + reserved8 = 8 key_expiration_time = 9 placeholder_for_backward_compatibility = 10 preferred_symmetric_algorithms = 11 revocation_key = 12 - reserved = 13 - reserved = 14 - reserved = 15 + reserved13 = 13 + reserved14 = 14 + reserved15 = 15 issuer = 16 - reserved = 17 - reserved = 18 - reserved = 19 + reserved17 = 17 + reserved18 = 18 + reserved19 = 19 notation_data = 20 preferred_hash_algorithms = 21 preferred_compression_algorithms = 22 diff --git a/python/examples/kaitai/packet_ppi.py b/python/examples/kaitai/packet_ppi.py index aa16a322..c281f784 100644 --- a/python/examples/kaitai/packet_ppi.py +++ b/python/examples/kaitai/packet_ppi.py @@ -9,7 +9,7 @@ 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)) -from ethernet_frame import EthernetFrame +from . import ethernet_frame class PacketPpi(KaitaiStruct): """PPI is a standard for link layer packet encapsulation, proposed as generic extensible container to store both captured in-band data and @@ -163,7 +163,7 @@ class PacketPpi(KaitaiStruct): elif _on == self._root.Linktype.ethernet: self._raw_body = self._io.read_bytes_full() io = KaitaiStream(BytesIO(self._raw_body)) - self.body = EthernetFrame(io) + self.body = ethernet_frame.EthernetFrame(io) self.body._read() else: self.body = self._io.read_bytes_full() diff --git a/python/examples/kaitai/pcap.py b/python/examples/kaitai/pcap.py index bf814663..80dc1d60 100644 --- a/python/examples/kaitai/pcap.py +++ b/python/examples/kaitai/pcap.py @@ -9,8 +9,8 @@ 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)) -from ethernet_frame import EthernetFrame -from packet_ppi import PacketPpi +from . import ethernet_frame +from . import packet_ppi class Pcap(KaitaiStruct): """PCAP (named after libpcap / winpcap) is a popular format for saving network traffic grabbed by network sniffers. It is typically @@ -219,12 +219,12 @@ class Pcap(KaitaiStruct): if _on == self._root.Linktype.ppi: self._raw_body = self._io.read_bytes(self.incl_len) io = KaitaiStream(BytesIO(self._raw_body)) - self.body = PacketPpi(io) + self.body = packet_ppi.PacketPpi(io) self.body._read() elif _on == self._root.Linktype.ethernet: self._raw_body = self._io.read_bytes(self.incl_len) io = KaitaiStream(BytesIO(self._raw_body)) - self.body = EthernetFrame(io) + self.body = ethernet_frame.EthernetFrame(io) self.body._read() else: self.body = self._io.read_bytes(self.incl_len) diff --git a/python/examples/kaitai/pcx_dcx.py b/python/examples/kaitai/pcx_dcx.py index 7c6376bc..03ab8ac9 100644 --- a/python/examples/kaitai/pcx_dcx.py +++ b/python/examples/kaitai/pcx_dcx.py @@ -8,7 +8,7 @@ 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)) -from pcx import Pcx +from .pcx import Pcx class PcxDcx(KaitaiStruct): """DCX is a simple extension of PCX image format allowing to bundle many PCX images (typically, pages of a document) in one file. It saw diff --git a/python/examples/kaitai/protocol_body.py b/python/examples/kaitai/protocol_body.py index 951c1a82..33bcbddc 100644 --- a/python/examples/kaitai/protocol_body.py +++ b/python/examples/kaitai/protocol_body.py @@ -9,11 +9,11 @@ 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)) -from udp_datagram import UdpDatagram -from icmp_packet import IcmpPacket -from tcp_segment import TcpSegment -from ipv4_packet import Ipv4Packet -from ipv6_packet import Ipv6Packet +from . import udp_datagram +from . import icmp_packet +from . import tcp_segment +from . import ipv4_packet +from . import ipv6_packet class ProtocolBody(KaitaiStruct): """Protocol body represents particular payload on transport level (OSI layer 4). @@ -192,22 +192,22 @@ class ProtocolBody(KaitaiStruct): self.body = self._root.NoNextHeader(self._io, self, self._root) self.body._read() elif _on == self._root.ProtocolEnum.ipv4: - self.body = Ipv4Packet(self._io) + self.body = ipv4_packet.Ipv4Packet(self._io) self.body._read() elif _on == self._root.ProtocolEnum.udp: - self.body = UdpDatagram(self._io) + self.body = udp_datagram.UdpDatagram(self._io) self.body._read() elif _on == self._root.ProtocolEnum.icmp: - self.body = IcmpPacket(self._io) + self.body = icmp_packet.IcmpPacket(self._io) self.body._read() elif _on == self._root.ProtocolEnum.hopopt: self.body = self._root.OptionHopByHop(self._io, self, self._root) self.body._read() elif _on == self._root.ProtocolEnum.ipv6: - self.body = Ipv6Packet(self._io) + self.body = ipv6_packet.Ipv6Packet(self._io) self.body._read() elif _on == self._root.ProtocolEnum.tcp: - self.body = TcpSegment(self._io) + self.body = tcp_segment.TcpSegment(self._io) self.body._read() self._debug['body']['end'] = self._io.pos() diff --git a/python/examples/kaitai/regf.py b/python/examples/kaitai/regf.py index de883bc3..6eb96b0d 100644 --- a/python/examples/kaitai/regf.py +++ b/python/examples/kaitai/regf.py @@ -10,25 +10,6 @@ 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 Regf(KaitaiStruct): - """This spec allows to parse files used by Microsoft Windows family of - operating systems to store parts of its "registry". "Registry" is a - hierarchical database that is used to store system settings (global - configuration, per-user, per-application configuration, etc). - - Typically, registry files are stored in: - - * System-wide: several files in `%SystemRoot%\System32\Config\` - * User-wide: - * `%USERPROFILE%\Ntuser.dat` - * `%USERPROFILE%\Local Settings\Application Data\Microsoft\Windows\Usrclass.dat` (localized, Windows 2000, Server 2003 and Windows XP) - * `%USERPROFILE%\AppData\Local\Microsoft\Windows\Usrclass.dat` (non-localized, Windows Vista and later) - - Note that one typically can't access files directly on a mounted - filesystem with a running Windows OS. - - .. seealso:: - Source - https://github.com/libyal/libregf/blob/master/documentation/Windows%20NT%20Registry%20File%20(REGF)%20format.asciidoc - """ SEQ_FIELDS = ["header", "hive_bins"] def __init__(self, _io, _parent=None, _root=None): self._io = _io diff --git a/python/examples/kaitai/sqlite3.py b/python/examples/kaitai/sqlite3.py index bb878099..1db1a375 100644 --- a/python/examples/kaitai/sqlite3.py +++ b/python/examples/kaitai/sqlite3.py @@ -9,7 +9,7 @@ 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)) -from vlq_base128_be import VlqBase128Be +from .vlq_base128_be import VlqBase128Be class Sqlite3(KaitaiStruct): """SQLite3 is a popular serverless SQL engine, implemented as a library to be used within other applications. It keeps its databases as diff --git a/python/examples/kaitai/standard_midi_file.py b/python/examples/kaitai/standard_midi_file.py index bd6305a7..f4723352 100644 --- a/python/examples/kaitai/standard_midi_file.py +++ b/python/examples/kaitai/standard_midi_file.py @@ -9,7 +9,7 @@ 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)) -from vlq_base128_be import VlqBase128Be +from .vlq_base128_be import VlqBase128Be class StandardMidiFile(KaitaiStruct): """Standard MIDI file, typically knows just as "MID", is a standard way to serialize series of MIDI events, which is a protocol used in many diff --git a/python/examples/kaitai/warcraft_2_pud.py b/python/examples/kaitai/warcraft_2_pud.py index 76908aad..760b0134 100644 --- a/python/examples/kaitai/warcraft_2_pud.py +++ b/python/examples/kaitai/warcraft_2_pud.py @@ -30,7 +30,7 @@ class Warcraft2Pud(KaitaiStruct): computer = 1 passive_computer = 2 nobody = 3 - computer = 4 + computer_ = 4 human = 5 rescue_passive = 6 rescue_active = 7 diff --git a/python/examples/kaitai/windows_lnk_file.py b/python/examples/kaitai/windows_lnk_file.py index 6de2cb52..c1dca73b 100644 --- a/python/examples/kaitai/windows_lnk_file.py +++ b/python/examples/kaitai/windows_lnk_file.py @@ -9,7 +9,7 @@ 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)) -from windows_shell_items import WindowsShellItems +from .windows_shell_items import WindowsShellItems class WindowsLnkFile(KaitaiStruct): """Windows .lnk files (AKA "shell link" file) are most frequently used in Windows shell to create "shortcuts" to another files, usually for -- cgit v1.3.1