5

在 C# 中搜索大型二进制文件以查找某个子字符串的最佳方法是什么?

为了提供一些细节,我试图从可执行文件中提取 DWARF 信息,所以我只关心二进制文件的某些部分(即以字符串开头的部分.debug_info.debug_abbrev等等)

我在 , 或 中看不到任何明显的东西StreamFileStream所以BinaryReader看起来我必须自己读取数据块并在数据中搜索字符串。

有没有更好的办法?

4

3 回答 3

7

.NET 中没有任何内置功能可以为您进行搜索,因此您需要逐块读取文件并扫描您想要查找的内容。

您可以通过两种方式加快搜索速度。

首先,使用缓冲 IO 并一次传输大块 - 不要逐字节读取,读取 64KB、256KB 或 1MB 块。

其次,不要对您想要的部分进行线性扫描 - 查看Boyer-Moore(维基百科链接)算法进行字符串搜索 - 您可以将其应用于搜索您想要的 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 回答