BOOL CompareAPage(DWORD dwBaseAddr, DWORD dwValue)
{
// 读取1页内存
BYTE arBytes[4096];
if(!::ReadProcessMemory(g_hProcess, (LPVOID)dwBaseAddr, arBytes, 4096, NULL))
return FALSE; // 此页不可读 // 在这1页内存中查找
DWORD* pdw;
for(int i=0; i<(int)4*1024-3; i++)
{
pdw = (DWORD*)&arBytes[i];
if(pdw[0] == dwValue) // 等于要查找的值?
{
if(g_nListCnt >= 1024)
return FALSE;
// 添加到全局变量中
g_arList[g_nListCnt++] = dwBaseAddr + i;
}
} return TRUE;
}
这个函数搜索从dwBaseAddr开始的一页内存值为dwValue的地址并记录到g_arList数组中“pdw = (DWORD*)&arBytes[i];
if(pdw[0] == dwValue)”,这两句不太明白,把arBytes数组中索引为i的值的地址赋给pdw,然后pdw[0]这个表示什么?按结果分析它的意思肯定是arBytes[i];arBytes[i+1];arBytes[i+2];arBytes[i+3];这四个BYTE组合成的DWORD型的值吧,为什么这样表示?