OK figured it out, but this has to be HORRIBLY inefficient:
Code:
unsigned long dwFindPattern( unsigned char *bMask,char * szMask, Byte*dw_Address, unsigned long dw_Len, unsigned long startAddressOffset )
{
unsigned long i;
for(i=0; i < dw_Len; i++)
if( bDataCompare( (unsigned char*)( dw_Address+i ),bMask,szMask) ){
PGLog(@"Found signature at 0x%X ", i + startAddressOffset);
const unsigned char* pData = (unsigned char*)( dw_Address+i );
unsigned long j = 0;
for ( ;*szMask;++szMask,++pData){
if ( j && *szMask == 'x' ){
break;
}
if ( *szMask == '?' ){
j++;
}
}
unsigned long offset = 0, k;
for (k=0;j>0;j--,k++){
--pData;
offset <<= 8;
offset ^= (long)*pData & 0xFF;
}
PGLog(@"Offset: 0x%X", offset);
return offset;
}
return 0;
}