晚上没事,加上采用了简单的办法和以前开发过的搜索内存的工具,居然完成了。 下面是界面和一些代码: //开始搜索 void C文件特征码扫描工具Dlg::OnBnClickedButton3() { m_CListBox.ResetContent(); CFile AimFile; std::fstream SettingFile; SettingFile.open(m_csSettingFilePath); char chDataName[100]; char chCode[150]; BYTE BCode[75],BBuff[1024*100]; int iOffset=0; wchar_t wchDataName[100]; size_t Size; while(!SettingFile.eof()) { SettingFile>>chDataName; MultiByteToWideChar(CP_ACP,0,chDataName,-1,wchDataName,100); memset(chCode,0,150); memset(BCode,0,75); SettingFile>>chCode; SettingFile>>iOffset; Size=CharToBYTE(chCode,BCode);//将读出的特征码由字符串转换BYTE数组 if(Size==0) { CString csBuffer=wchDataName; csBuffer+=L": 特征码有误"; m_CListBox.AddString(csBuffer); continue; } //下面开始搜索整个文件 ULONGLONG ullReadFileSize=0; BOOL bFind=FALSE; AimFile.Open(m_csAimFilePath,CFile::modeRead|CFile::typeBinary|CFile::shareDenyNone); while(ullReadFileSize<=AimFile.GetLength() && !bFind) { AimFile.Read(BBuff,1024*100);//每次读取100K的数据 for(int i=0;i<1024*100;i++) { if(BBuff[i]==BCode[0]) { if(CompareTwoBYTE(&BBuff[i],BCode,Size))//如果相等,那么找到了 { CString csBuff=wchDataName; wchar_t wchBuff[30]; _itow_s((int)ullReadFileSize+i+0x00400000+iOffset,wchBuff,16); csBuff+=L": "; csBuff+=wchBuff; csBuff.MakeUpper(); m_CListBox.AddString(csBuff); bFind=TRUE; break; } } } ullReadFileSize+=1024*100; } AimFile.Close(); if(!bFind)//如果没有找到 { CString csBuff=wchDataName; csBuff+=L": NULL"; m_CListBox.AddString(csBuff); } } SettingFile.close(); } BOOL C文件特征码扫描工具Dlg::CompareTwoBYTE(BYTE* B1, BYTE* B2, size_t Size) { for(size_t i=0;i<Size;i++) { if(B1[i]!=B2[i]) { return FALSE; } } return TRUE; }