//kmp搜索算法
void kmp_init(const unsigned char *patn, int len, int *next)
{
int i, j;
/* assert(patn != NULL && len > 0 && next != NULL);
*/
next[0] = 0;
for (i = 1, j = 0; i < len; i++) {
while (j > 0 && patn[j] != patn[i])
{
j = next[j - 1];
}
if (patn[j] == patn[i])
{
j++;
}
next[i] = j;
}
}
int kmp_find(const unsigned char *text, int text_len, const unsigned char *patn,
int patn_len, int *next)
{
int i, j;
/* assert(text != NULL && text_len > 0 && patn != NULL && patn_len > 0
&& next != NULL);
*/
for (i = 0, j = 0; i < text_len; i++) {
while (j > 0 && text[i] != patn[j])
{
j = next[j - 1];
}
if (text[i] == patn[j])
{
j++;
}
if (j == patn_len)
{
return (i + 1 - patn_len);
}
}
return -1;//没有找到
}
int mg_len = sizeof(magic_code);
int* next = new int[mg_len];
kmp_init(magic_code, mg_len, next);
ret = kmp_find((const unsigned char*)start_addr, (int)start_len, magic_code, mg_len, next);
kmp搜索算法
最新推荐文章于 2023-09-14 23:36:24 发布