2009-04-10 3 views
4

Каков наилучший способ поиска большого двоичного файла для определенной подстроки в C#?C# - Поиск двоичного файла для шаблона

Чтобы обеспечить некоторые специфические особенности, я пытаюсь извлечь DWARF информацию из исполняемого файла, поэтому я забочусь только о некоторых частях двоичного файла (а именно разделы, начиная со струнами .debug_info, .debug_abbrev и т.д.)

Я не вижу ничего очевидного в Stream, FileStream, или BinaryReader, так что мне кажется, что мне нужно будет прочитать куски и выполнить поиск по этим строкам.

Есть ли лучший способ?

ответ

6

В .NET нет ничего, что позволит вам выполнить поиск, так что вам нужно будет прочитать в куске файла кусок и просмотреть то, что вы хотите найти.

Вы можете ускорить поиск двумя способами.

Во-первых, используйте буферный ввод-вывод и передавайте большие куски за раз - не читайте байты по байтам, читайте 64 КБ, 256 КБ или 1 Мб кусков.

Во-вторых, не выполняйте линейное сканирование части, которую вы хотите - ознакомьтесь с алгоритмом Boyer-Moore (wikipedia link) для поиска строк - вы можете применить это для поиска необходимой информации DWARF.

0

Думаю, вам нужно будет сделать это самостоятельно, BinaryReader не был предназначен для поиска текста в двоичном файле. Однако вы должны помнить о кодировке текста, которую вы используете при поиске.

1

Должна быть библиотека DWARF C, с которой вы могли бы скомпилировать и использовать interop? Я сделал несколько поисков и нашел this. Если библиотека оттуда могла быть скомпилирована в DLL в Windows (я предполагаю, что вы используете Windows), то вы можете использовать System.Runtime.InteropServices для взаимодействия с DLL и извлечения вашей информации оттуда.

Возможно, возможно?

+0

Да, лучше правильно разобрать формат двоичного файла. –

Смежные вопросы