Kaitai Struct にバイナリ構造をリバース エンジニアリングさせようとしています。seq
フィールドは意図したとおりに機能しますがinstances
、希望どおりに機能していないようです。
私のバイナリ形式には、配列サブheader
フィールドを持つフィールドとして解析する定数のリストを含むヘッダーが含まれています。consts
types:
header:
seq:
# ...
- id: consts
type: u8
repeat: expr
repeat-expr: 0x10
ただし、次の宣言を使用しようとすると:
instances:
index_const:
value: '_root.header.consts[idx - 0x40]'
if: idx >= 0x40 and idx <= 0x4f
これは、[0x40..0x4f] の範囲内にある場合にのみ、index_const
配列を調べての値を計算することを目的としています。header.consts
idx
私はターゲット言語として Python を使用しており、次のようなコードを生成する必要があると想定しています。
@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
ただし、私が得るものは次のとおりです。
@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
それは私だけですか、明らかな何かが欠けていますか、それとも Kaitai Struct のバグですか?