【问题标题】:Finding a byte-pattern in some memory area在某些内存区域中查找字节模式
【发布时间】:2009-12-27 21:42:11
【问题描述】:

我想在一些内存范围内搜索特定的字节模式。因此,我的做法是构建一个函数

void * FindPattern (std::vector<byte> pattern, byte wildcard, 
    void * startAddress, void * endAddress);

使用 Boyer-Moore-Horspool 算法在内存范围内查找模式。

wildcard 字节保留用于应被视为通配符的某些特定字节。 因此 - 例如 - 如果 wildcard0xCC,则 pattern 中的每个 0xCC 都将是一个通配符。

该函数应返回内存范围的开始,即第一次找到该模式的位置。

我现在的问题是:在最常见的库中是否已经完成了一些类似的功能,还是我必须自己实现?

【问题讨论】:

  • 这里的“通配符”是什么意思?在某些解释中,通配符可能意味着零个或多个匹配,在其他定义中,它可能意味着一个或多个匹配。请澄清你的定义。
  • wild-card 在这种情况下是完全匹配的。所以,如果模式是 0x1337f00d 并且通配符设置为 0x37,它应该匹配 0x13??f00d 和 ??是一个任意字节。

标签: c++ memory pattern-matching


【解决方案1】:

BMH 上的Wikipedia page 有一个实现。我认为 Boost xpressive 也是基于 BMH 的(一种变体)。

【讨论】:

  • 如果windows.h 或类似的标准库中有这样的功能,questino 更像。
  • 据我所知没有,但看看 Boost 的 xpressive。
【解决方案2】:

不,似乎甚至没有像“strstr”这样的函数,而是用于原始内存。更不用说通配符了!

【讨论】:

  • 嗯...std::search 不能作为strstr 工作吗?并不是说我建议将它作为 gnu libc 的 memmem 的替代品,但它存在并且可能有效;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
相关资源
最近更新 更多