Skip to content

Instantly share code, notes, and snippets.

@Manouchehri
Forked from FilippoBiga/linked_list.ksy
Created January 22, 2018 22:34
Show Gist options
  • Save Manouchehri/c775cd58d0efbe73d3de2e6c0e730728 to your computer and use it in GitHub Desktop.
Save Manouchehri/c775cd58d0efbe73d3de2e6c0e730728 to your computer and use it in GitHub Desktop.
Kaitai linked list
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 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