C # - поиск шаблона в двоичном файле

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

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

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

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


person Clayton Hughes    schedule 10.04.2009    source источник


Ответы (3)


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

Ускорить поиск можно двумя способами.

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

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

person Bevan    schedule 14.04.2009

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

person Igor Brejc    schedule 10.04.2009

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

Возможно?

person Community    schedule 10.04.2009