6

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.constsidx

私はターゲット言語として 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 のバグですか?

4

1 に答える 1