他的例子有一个函数
BOOL CompareAPage(DWORD dwBaseAddr, short dwValue)
{
// 读取1页内存
BYTE arBytes[4096];
if(!::ReadProcessMemory(g_hProcess, (LPVOID)dwBaseAddr, arBytes, 4096, NULL))
return FALSE; // 此页不可读 // 在这1页内存中查找
short* pdw;
for(int i=0; i<(int)4*1024 - 3; i++) {
pdw = (short*)&arBytes[i];
if(pdw[0] == dwValue) // 等于要查找的值?
{
if(g_nListCnt >= 1024)
return FALSE;
// 添加到全局变量中
g_arList[g_nListCnt++] = dwBaseAddr + i;
}
} return TRUE;
}红色字体for循环条件中i<(int)4*1024 - 3,为什么要减3了,请大侠帮忙!!!

解决方案 »

  1.   

    代码有点乱,整理一下:
    BOOL CompareAPage(DWORD dwBaseAddr, short dwValue)
    {
    // 读取1页内存
    BYTE arBytes[4096];
    if(!::ReadProcessMemory(g_hProcess, (LPVOID)dwBaseAddr, arBytes, 4096, NULL))
    return FALSE; // 此页不可读 // 在这1页内存中查找
    short* pdw;
    for(int i=0; i<(int)4*1024 - 3; i++) {
    pdw = (short*)&arBytes[i];
    if(pdw[0] == dwValue) // 等于要查找的值?
    {
    if(g_nListCnt >= 1024)
    return FALSE;
    // 添加到全局变量中
    g_arList[g_nListCnt++] = dwBaseAddr + i;
    }
    } return TRUE;
    }
      

  2.   

    晕啊,又整错了
    BOOL CompareAPage(DWORD dwBaseAddr, short dwValue)
    {
    // 读取1页内存
    BYTE arBytes[4096];
    if(!::ReadProcessMemory(g_hProcess, (LPVOID)dwBaseAddr, arBytes, 4096, NULL))
    return FALSE; // 此页不可读 // 在这1页内存中查找
    short* pdw;
    for(int i=0; i<(int)4*1024 - 3; i++)
    {
    pdw = (short*)&arBytes[i];
    if(pdw[0] == dwValue) // 等于要查找的值?
    {
    if(g_nListCnt >= 1024)
    return FALSE;
    // 添加到全局变量中
    g_arList[g_nListCnt++] = dwBaseAddr + i;
    }
    } return TRUE;
    }
      

  3.   

    1页的大小是4096byte,int是4byte,你要取一个完整的数值,可能从1-4093任意一个字节开始(4字节为一个你需要的值,这个值可能是3-6,4093-4096),但当i等于4094,95,96时,就取不到一个完整的值。