C # - Поиск двоичного файла для шаблона - PullRequest
5 голосов
/ 10 апреля 2009

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 14 апреля 2009

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

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

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

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

1 голос
/ 11 апреля 2009

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

Возможно

1 голос
/ 10 апреля 2009

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

...