私は、Kaitai Structにバイナリ構造をリバースエンジニアリングしようとしています。 seq
フィールドは意図したとおりに動作しますが、instances
は私が望むように動作していないようです。Kaitai Struct:条件付きの計算インスタンス
instances:
index_const:
value: '_root.header.consts[idx - 0x40]'
if: idx >= 0x40 and idx <= 0x4f
:私は次の宣言を使用しようとすると、しかし
types:
header:
seq:
# ...
- id: consts
type: u8
repeat: expr
repeat-expr: 0x10
:
マイバイナリ形式は、私はconsts
アレイサブフィールドでheader
フィールドとして解析定数のリストを有するヘッダーを含みます
idx
が[0x40..0x4f]の範囲にある場合にのみの値をheader.consts
の配列にルックアップして計算することを意図しています。
:私は、それは私だけ
@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
です:しかし、私が取得することである
@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
を何かが明らかでないか、それともKaitai Structのバグですか?
ありがとうございます!回避策に関するアイデアやバグ修正を待たなければならないのは何ですか? –
最も単純な回避策は、あなたが 'index_const'にアクセスしたい場所で' if'にあるものをインライン化することです。実際のコードでは大丈夫ですが、KSの内部表現言語ではやや難しいかもしれませんが、私はあなたに最新の情報を提供していきます。 – GreyCat