Created
January 22, 2018 18:19
-
-
Save FilippoBiga/aca34fbef2bcedde007873d1a817d085 to your computer and use it in GitHub Desktop.
Kaitai linked list
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
meta: | |
id: linked_list | |
endian: le | |
seq: | |
- id: entries | |
size: 8 | |
type: entry | |
repeat: until | |
repeat-until: _.next == 0 | |
types: | |
entry: | |
seq: | |
- id: next | |
type: u4 | |
- id: value | |
type: u4 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This is a generated file! Please edit source .ksy file and use kaitai-struct-compiler to rebuild | |
import array | |
import struct | |
import zlib | |
from enum import Enum | |
from pkg_resources import parse_version | |
from kaitaistruct import __version__ as ks_version, KaitaiStruct, KaitaiStream, BytesIO | |
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 LinkedList(KaitaiStruct): | |
def __init__(self, _io, _parent=None, _root=None): | |
self._io = _io | |
self._parent = _parent | |
self._root = _root if _root else self | |
self._raw_entries = [] | |
self.entries = [] | |
while True: | |
_buf = self._io.read_bytes(8) | |
self._raw_entries.append(_buf) | |
io = KaitaiStream(BytesIO(self._raw_entries[-1])) | |
_ = self._root.Entry(io, self, self._root) | |
self.entries.append(_) | |
if _.next == 0: | |
break | |
class Entry(KaitaiStruct): | |
def __init__(self, _io, _parent=None, _root=None): | |
self._io = _io | |
self._parent = _parent | |
self._root = _root if _root else self | |
self.next = self._io.read_u4le() | |
self.value = self._io.read_u4le() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment