I'm trying to get Kaitai Struct to reverse engineer a binary structure. seq
fields work as intended, but instances
don't seem to work as I want them to.
My binary format includes a header with a list of constants that I parse as header
field with consts
array subfield:
types:
header:
seq:
# ...
- id: consts
type: u8
repeat: expr
repeat-expr: 0x10
However, when I try to use the following declaration:
instances:
index_const:
value: '_root.header.consts[idx - 0x40]'
if: idx >= 0x40 and idx <= 0x4f
This one is intended to calculate a value of index_const
by looking up into array of header.consts
if and only if idx
is in range of [0x40..0x4f].
I use Python as my target language and I assume that it should generate a code like:
@property
def index_const(self):
if hasattr(self, '_m_index_const'):
return self._m_index_const
if self.idx >= 64 and self.idx <= 79:
self._m_index_const = self._root.header.consts[(self.idx - 64)];
return self._m_index_const
However, what I get is:
@property
def index_const(self):
if hasattr(self, '_m_index_const'):
return self._m_index_const
self._m_index_const = self._root.header.consts[(self.idx - 64)];
return self._m_index_const
Is it just me, am I missing something obvious, or is it a bug in Kaitai Struct?