在二进制文件中查找模式?

时间:2012-03-10 07:57:27

标签: c++ winapi binaryfiles string-matching

我编写了下面的函数来查找文本中的模式:

bool match(char* patt,char* text){ 

    int textLoc=0, pattLoc=0, textStart=0;  

    while(textLoc < (int) strlen(text) && pattLoc < (int)strlen(patt)){ 

        if( *(patt+pattLoc) == *(text+textLoc) ){     
            textLoc= textLoc+1;          
            pattLoc= pattLoc+1;      
        }   
        else{          
            textStart=textStart+1;  
        textLoc=textStart;           
        pattLoc=0;   
        }     
    }   


    if(pattLoc >=    (int) strlen(patt)) 
        return true;  
    else return false; 

} 

如图所示,该函数采用char*类型的两个参数。我想使用此函数在binary file中查找模式,您建议执行此问题吗?

3 个答案:

答案 0 :(得分:1)

这里没有对错。我在这里考虑的唯一区别是使用缓冲区/大小方法而不是字符串。

您还应该考虑如何阅读文件。您是要将整个文件读取到内存中还是要分段阅读?

如果您要分段阅读,请始终保存每个部分的最后部分(搜索模式的大小)并将其附加到下一部分的开头。这样,每个部分的截止也将被评估。

答案 1 :(得分:1)

在我看来,您试图自己实现流行的strstr功能。但这对你没有帮助,因为你要求找到二进制模式。在这种情况下您应该使用的函数称为memmem

答案 2 :(得分:1)

您听起来更像是在寻找在文件中查找模式的最佳方式。如果是这样,那么单个和多个模式检查有一个非常好的文档:

  

给定模式P = a1a2 ... an,Fnd在文本T =中出现所有P   B1B2 ... BM。

     

对多图案情况的扩展:给定一组模式,P1,P2,......,   Pl,

     

在文本T = b1b2 ... bm中发生所有P的出现。

您可以查看此document以获取简单说明,并this one查看更详细和不同的实施/代码。