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

5
什么是在C#中搜索大型二进制文件中特定子字符串的最佳方法?
具体来说,我正在尝试从可执行文件中提取DWARF信息,因此我只关心二进制文件的某些部分(即以字符串 .debug_info .debug_abbrev 等开头的部分)。
Stream FileStream BinaryReader 中没有明显的解决方案,因此看起来我必须读取块并自己搜索数据以查找字符串。
有更好的方法吗?
3个回答

7

.NET中没有内置的工具可以为您执行搜索,因此您需要逐块读取文件并扫描要查找的内容。

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

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

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


1

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


1

一定有一个DWARF C库可以编译并与之交互吧?我进行了一些搜索,找到了this。如果那里的库可以在Windows上编译为DLL(我假设你正在使用Windows),那么你可以使用System.Runtime.InteropServices来与DLL进行交互,并从中提取信息。

也许可以这样做?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接