//
内存比较函数,支持模糊查找,为?时通配 size = sizeof(array)
static INT XMemCmp(LPBYTE startAddr, UINT len, LPBYTE obj, UINT size)
{
MEMORY_BASIC_INFORMATION mbi;
ZeroMemory(&mbi, sizeof(MEMORY_BASIC_INFORMATION));
if
(!VirtualQuery((LPCVOID)startAddr, &mbi, sizeof(MEMORY_BASIC_INFORMATION)))
{
return
0;
}
if
(mbi.State != MEM_COMMIT)
{
return
0;
}
//if
(mbi.Protect && PAGE_EXECUTE_READ
if
(size > len)
return
0;
for
(UINT i = (UINT)startAddr; i < (UINT)startAddr + len; i++)
{
LPBYTE curPbt = (LPBYTE)i;
for
(UINT j = (UINT)obj; j < (UINT)obj + size; j++)
{
LPBYTE objPbt = (LPBYTE)j;
if
((*curPbt == *objPbt) || (*objPbt ==
'?'
))
{
++curPbt;
}
else
{
break
;
}
if
(j == (UINT)obj + size - 1)
return
i;
}
}
return
0;
}