【问题标题】:C# - Search Binary File for a PatternC# - 在二进制文件中搜索模式
【发布时间】:2009-04-10 18:33:56
【问题描述】:

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

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

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

有没有更好的办法?

【问题讨论】:

    标签: c# file binary find substring


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        也许?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-12-05
          • 2014-11-02
          • 2019-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-28
          • 1970-01-01
          相关资源
          最近更新 更多