Próbuję zmusić Kaitai Struct do inżynierii wstecznej struktury binarnej. seq
pola działają zgodnie z przeznaczeniem, ale instances
nie działają tak, jak chcę.Kaitai Struct: obliczone instancje z warunkiem
Moja formacie binarnym zawiera nagłówek z listy stałych że I analizować jako header
polu consts
tablicy podpola:
types:
header:
seq:
# ...
- id: consts
type: u8
repeat: expr
repeat-expr: 0x10
Jednak, gdy próbuję użyć następujące oświadczenie:
instances:
index_const:
value: '_root.header.consts[idx - 0x40]'
if: idx >= 0x40 and idx <= 0x4f
Ten jest przeznaczony do obliczenia wartości index_const
przez sprawdzenie w tablicy header.consts
wtedy i tylko wtedy, gdy idx
jest w zakresie [0x40..0x4f].
Używam Python jako mój język docelowy i zakładam, że powinno wygenerować kod jak:
@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
Jednak to, co pojawia się:
@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
Czy to tylko mnie, czy jestem brakuje czegoś oczywistego, czy też jest to błąd w Kaitai Struct?
Dzięki! Szkoda, że to błąd :(Jakieś pomysły dotyczące obejść i ile powinienem czekać na poprawkę? –
Najprostszym rozwiązaniem byłoby po prostu wstawienie cokolwiek masz w 'if' w miejscu, do którego chcesz uzyskać dostęp do' index_const' Na ogół dobrze jest robić to w prawdziwym kodzie, ale może to być nieco trudne dla języka wewnętrznego w języku KS. Postaram się na bieżąco informować. – GreyCat