bool mEsp::bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
for(;*szMask;++szMask,++pData,++bMask)
if(*szMask=='x' && *pData!=*bMask) return 0;
return (*szMask) == NULL;
}
DWORD mEsp::FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask)
{
for(DWORD i=0; i<dwLen; i++)
if (cEsp.bCompare((BYTE*)(dwAddress+i),bMask,szMask)) return (DWORD)(dwAddress+i);
return 0;
}
BASE_001 = cEsp.FindPattern(HOOKSHELL,0xFFFFFF,(unsigned char*)"\xB9\x00\x00\x00\x00\", "x????");

private static unsafe uint FindPattern(int StartAddress, int Length, string bMask, string szMask)
{
byte[] ByteMask = new byte[szMask.Length];
//Creating Byte Array
int State = 0;
for (int i = 0; i < bMask.Length; i++)
{
if (bMask[i] == 'x')
{
ByteMask[State] = byte.Parse(bMask.Substring(i + 1, 2), System.Globalization.NumberStyles.HexNumber);
State++;
}
}
//Searching Byte Pattern
for (int i = 0; i < Length; i++)
{
bool Found = true;
for (int j = 0; j < ByteMask.Length; j++)
{
Found = Found && ((ByteMask[j] == *(byte*)(StartAddress + i + j)) || szMask[j] == '?');
}
if (Found) return (uint)(StartAddress + i); //Found it
}
return 0; //Didn't found it