2009-04-10 13 views
4

C#の特定の部分文字列に対して大きなバイナリファイルを検索する最適な方法は何ですか?いくつかの詳細を提供するために、C# - パターンのバイナリファイルの検索

、私は実行からDWARF情報を抽出しようとしているので、私は唯一のバイナリファイル(文字列.debug_infoで始まるすなわちセクション、.debug_abbrevなど)の特定の部分を気に

StreamFileStream、またはBinaryReaderに何も表示されないので、チャンクを読み込んで、自分自身の文字列のデータを検索する必要があるようです。

良い方法がありますか?

答えて

6

.NETには何も組み込まれていないので、チャンクでファイルを読み込み、探したいものをスキャンする必要があります。

検索をスピードアップするには、2つの方法があります。

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

第2に、必要な部分のリニアスキャンを実行しないでください。文字列検索のBoyer-Moore(ウィキペディアリンク)アルゴリズムをチェックしてください。これを適用して、必要なDWARF情報を検索することができます。

0

私はあなた自身でそれをやらなければならないと思います.BinaryReaderはバイナリファイルのテキストを検索するために設計されていません。ただし、検索時に使用するテキストエンコーディングに注意する必要があります。

1

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

おそらく?

+0

はい、バイナリファイル形式を正しく解析する方がよいでしょう。 –

関連する問題