Kaitai Struct:计算具有条件的实例

时间:2016-07-12 16:41:08

标签: python data-structures reverse-engineering kaitai-struct

我试图让Kaitai Struct对二进制结构进行逆向工程。 seq字段按预期工作,但instances似乎无法正常工作。

我的二进制格式包含一个标题,其中包含我用[{1}}数组子字段解析为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的值。

我使用Python作为目标语言,我认为它应该生成如下代码:

idx

然而,我得到的是:

    @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中的一个错误?

1 个答案:

答案 0 :(得分:2)

是的,我想它应该被视为一个错误。至少,编译器应该允许在值实例中使用if并正确处理它,或者禁止if并发出错误消息。

考虑到这一点,我认为没有理由允许常规if instances,但对value instances采取这种方式。

感谢您举报,我已提交an issue

更新:此问题现已标记为已关闭。

  

if_instances测试现在测试了。 ......关闭这个解决方案。