5

C#で特定の部分文字列の大きなバイナリファイルを検索する最良の方法は何ですか?

.debug_infoいくつかの詳細を提供するために、実行可能ファイルから DWARF 情報を抽出しようとしているので、バイナリ ファイルの特定の部分 (つまり、文字列、.debug_abbrevなどで始まるセクション) だけを気にします。

StreamFileStream、またはに明らかなものは見当たりませんBinaryReader。そのため、チャンクを読み込んで、自分で文字列のデータを検索する必要があるようです。

より良い方法はありますか?

4

3 に答える 3

7

.NET には、検索を実行するものは何も組み込まれていないため、ファイルをチャンクごとに読み取り、検索対象をスキャンする必要があります。

2 つの方法で検索を高速化できます。

まず、bufferred IO を使用し、一度に大きなチャンクを転送します。バイトごとに読み取らず、64KB、256KB、または 1MB のチャンクを読み取ります。

次に、必要な部分の線形スキャンを行わないでください。文字列検索用のBoyer-Moore (wikipedia リンク) アルゴリズムを確認してください。これを、必要な DWARF 情報の検索に適用できます。

于 2009-04-14T04:42:48.500 に答える
1

BinaryReader は、バイナリ ファイル内のテキストを検索するようには設計されていません。ただし、検索時に使用するテキスト エンコーディングに注意する必要があります。

于 2009-04-10T18:42:07.533 に答える
1

コンパイルして相互運用できる DWARF C ライブラリが必要ですか? 私はいくつかの検索を行い、これを見つけまし。そこからのライブラリを Windows で DLL にコンパイルできる場合 (Windows を使用していると仮定します)、System.Runtime.InteropServices を使用して DLL と対話し、そこから情報を抽出できます。

多分?

于 2009-04-10T21:25:43.147 に答える