C# - 搜索模式的二进制文件

时间:2009-04-10 18:33:56

标签: c# file binary find substring

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

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

我在.debug_abbrevStreamFileStream中看不到任何明显的内容,因此看起来我必须读取数据块并在数据中搜索字符串自己。

有更好的方法吗?

3 个答案:

答案 0 :(得分:7)

.NET中没有任何内置功能可以搜索你,所以你需要通过chunk读取文件块并扫描你想要找到的内容。

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

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

其次,不要对您想要的部分进行线性扫描 - 查看字符串搜索的Boyer-Moore(维基百科链接)算法 - 您可以将其应用于搜索所需的DWARF信息。

答案 1 :(得分:1)

我认为你必须自己做,BinaryReader不是为搜索二进制文件中的文本而设计的。但是,您应该注意搜索时使用的文本编码。

答案 2 :(得分:1)

必须有一个DWARF C库,你可以编译和使用互操作吗?我做了一些搜索,发现this。如果那里的库可以编译成Windows上的DLL(我假设您使用的是Windows),那么您可以使用System.Runtime.InteropServices与DLL交互并从那里提取您的信息。

也许?