問題タブ [kaitai-struct]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Kaitai Struct: 条件付きの計算されたインスタンス
Kaitai Struct にバイナリ構造をリバース エンジニアリングさせようとしています。seq
フィールドは意図したとおりに機能しますがinstances
、希望どおりに機能していないようです。
私のバイナリ形式には、配列サブheader
フィールドを持つフィールドとして解析する定数のリストを含むヘッダーが含まれています。consts
ただし、次の宣言を使用しようとすると:
これは、[0x40..0x4f] の範囲内にある場合にのみ、index_const
配列を調べての値を計算することを目的としています。header.consts
idx
私はターゲット言語として Python を使用しており、次のようなコードを生成する必要があると想定しています。
ただし、私が得るものは次のとおりです。
それは私だけですか、明らかな何かが欠けていますか、それとも Kaitai Struct のバグですか?
java - Kaitai Struct を使用したオペコードの解析
Kaitai Struct での最初のステップとして、練習として BSON パーサーを実行しようとしています。BSON 要素を解析する .ksy コードは次のようになります。
お気づきかもしれませんが、繰り返しがたくさんあります。if
追加の要素タイプを実行するたびに、ブロックを複製する必要があります。さらに悪いことに、基本的にそのようなフィールドごとに 3 回複製する必要があります。
私のターゲット言語は Java です。Kaitai の前は Preon しか試していませんでしたが、次のような条項がありました。
そこで、「プレフィックス」の値に基づいて、これら 2 つの要素を自動的に取得します。カイタイでできるんですか?
python - Python: Kaitai Struct で ID3v1 タグを読み取る
Kaitai Struct に MP3 の ID3v1 タグ形式を解析させようとしています。標準によると、これは特定のオフセットにある固定形式の構造ですが、このオフセットはファイルの先頭からではなく、末尾から計算されるというトリックがあります。
タグの基本的な.ksy
概要は次のとおりです。実際に変更してはならないのは当然だと思います。
そして、ファイルの最後まで128バイトから読み取る方法についての私の素朴な考えは次のとおりです。
簡単な Python テスト スクリプトで試してみます。
ただし、その負の量を Python の File オブジェクトに直接渡すように見えるためseek()
、失敗します。
トレースバック (最後の最後の呼び出し): ファイル "try-id3.py"、6 行目、print(f.id3v1_tag) ファイル "id3v1_1.py"、171 行目、id3v1_tag self._io.seek(-128) ファイル " kaitaistruct.py", line 29, in seek self._io.seek(n) IOError: [Errno 22] Invalid argument
他のいくつかの同様に非常識なアイデアの後、回避策を見つけました。pos
引数を省略.ksy
して、スクリプト内の適切な位置を手動で探すことができます。
これは機能しますが、本当にハックな気がします:( Kaitai StructとPythonでそれを行うより良い方法はありますか?
windows - Windows レジストリ データベースの解析
この質問を参考に、Kaitai Web IDEを使用して Windows レジストリ データベース ハイブ ファイル形式を解析しようとしていますが、問題が発生しました。私が最も興味を持っているハイブはで、90 MB を超えています。c:\windows\system32\config\software
Kaitai Web IDE にロードしようとすると、最初の 0x97d680 バイトしかロードされません。他のすべてが切り捨てられているようです。
私の最初の推測では、おそらくそれはある種のブラウザの制限です。0x97d680 バイトは 10 進数で 9950848 です。実際、グーグルで調べたところ、最近のブラウザでは「ローカル ストレージ」と呼ばれるものに 10 MB の制限があることがわかりました。
Windows 10 で Google Chrome 56.0.2924.9 を使用しています。この制限を緩和するにはどうすればよいですか?
python - 前の要素に応じてアイテムを解析する
コンテキストを説明するために、DICOM ファイルを解析していますが、Transfer Syntax エントリを使用して暗黙的または明示的な解析を使用するかどうかを判断するのに苦労しています。しかし、簡略化された構文を定義するので、dicom の知識は必要ありません。
一連のエントリがあり、各エントリにはgroup number
、および のdata
部分があります。グループ番号は常に として表されu2
ますが、データはさまざまなタイプにすることができu2
ますu4
。エントリの順序は任意ですが、 のエントリはすべてgroup number == 2
先頭に配置する必要があります。のすべてのエントリgroup number == 2
のデータ型は ですu2
が、後続のデータ部分は異なる場合があります。
ここで難しい部分があります:これとまったく同じエントリが以前に存在した場合にのみ、を持つすべてのアイテムgroup number != 2
がデータ型を持ちます。u4
たとえば、Python では、次のように解析します。
kaitai-struct を使用してこれを達成する方法はありますか?
hex - 16 進ダンプの解析
最近、任意のバイナリ形式を処理するkaitai 構造体に出会いました。16 進ダンプがあります。つまり、解析したいファイルがあり、データのマッピングのためにkaitaiのWeb IDEでビジュアライザーを使用すると、16 進形式になっています。 16 進数データを 16 進数に戻す ビジュアライザーを使用するときに、データを 16 進数から変換して正確な 16 進数データを取得する方法はありますか。
たとえば、これを 3335363330 と考えてから、再び 33 33 33 35 33 36 33 33 33 30 にマッピングします。
前もって感謝します