我正在尝试让 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
这个旨在index_const
通过查找header.consts
当且仅当idx
在 [0x40..0x4f] 范围内的数组来计算 的值。
我使用 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 中的错误?