2009-12-27 42 views
1

我想搜索特定字节模式的某些内存范围。因此,我的做法是使用博耶 - 穆尔 - Horspool算法来找出内存范围的模式建立一个功能在某些内存区域中查找字节模式

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

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

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

我的问题是现在:是否有一些类似的功能已经在最常见的库中完成,或者我必须为我自己实现这个功能吗?

+0

这里的“通配符”是什么意思?在一些交际中,通配符可能意味着零次或多次匹配,在其他定义中可能意味着一次或多次匹配。请澄清你的定义。 – 2009-12-28 00:09:02

+0

在这种情况下,通配符完全是一个匹配。所以,如果模式是0x1337f00d并且通配符设置为0x37,它应该匹配0x13 ?? f00d与?是一个任意字节。 – Etan 2009-12-28 00:38:14

回答

3

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

+0

questino更像是在'windows.h'或类似的标准库中有这样一个函数。 – Etan 2009-12-27 21:50:03

+0

据我所知,没有,但看看Boost的xpressive。 – jason 2009-12-27 21:52:36

1

不,看起来似乎甚至没有像'strstr'这样的功能,但对于原始记忆。更别说通配符了!

+2

嗯...不会'std :: search'作为'strstr'吗?不是我建议它作为gnu libc的'memmem'的替代品,但它存在并且可能起作用;-) – 2009-12-27 22:46:38