Code:
DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char *szMask)
This is my method:
Code:
#define realAddy( cast, base, offset ) (cast)((DWORD)(base) + (DWORD)(offset))
bool bExist(BYTE part, BYTE *whole, char *mask)
{
BYTE *start = (BYTE*)(whole + sizeof(whole) - 1);
for(DWORD loc = 0; loc < sizeof(whole); loc++)
if((*(BYTE*)(start - loc) == part) || (*(mask + (strlen(mask) - 1) - loc) == '?')) return true;
return false;
}
DWORD lastLocationOfByte(BYTE part, BYTE *whole, char *mask)
{
BYTE *start = (BYTE*)(whole + sizeof(whole) - 1);
for(DWORD loc = 0; loc < sizeof(whole); loc++)
if((*(BYTE*)(start - loc) == part) || (*(mask + (strlen(mask) - 1) - loc) == '?')) return (sizeof(whole) - loc);
}
DWORD FindPattern(DWORD first, DWORD total, BYTE *val, char *mask)
{
size_t next = sizeof(*val);
BYTE *addy = (BYTE*)((val + next) - 1);
bool exist = false;
BYTE *loc;
for(DWORD n = (next - 1); n < total;)
{
DWORD spot;
for(spot = 0; (*(unsigned char*)(first + n - spot) == *(unsigned char*)(addy - spot)) || (*(mask + (strlen(mask) - 1) - spot) == '?'); spot++);
if(spot == next) return realAddy( DWORD, first, n );
else if(bExist(*(BYTE*)(first + n), val, mask))
n += lastLocationOfByte(*(BYTE*)(first + n), val, mask);
else n += next;
}
return false;
}