我试图让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中的一个错误?
答案 0 :(得分:2)
if
并正确处理它,或者禁止if
并发出错误消息。
考虑到这一点,我认为没有理由允许常规if
instances
,但对value
instances
采取这种方式。
感谢您举报,我已提交an issue。
更新:此问题现已标记为已关闭。
if_instances
测试现在测试了。 ......关闭这个解决方案。