Walk User Address Space

View Code
void WalkUserSpace()
{
    SYSTEM_INFO                    stSysInf;
    MEMORY_BASIC_INFORMATION    st_MemBasicInfor;

    memset(&stSysInf,         0, sizeof(SYSTEM_INFO));
    memset(&st_MemBasicInfor, 0, sizeof(MEMORY_BASIC_INFORMATION));
    
    GetSystemInfo(&stSysInf);
    
    DWORD dwUserAddrLow         = (DWORD)stSysInf.lpMinimumApplicationAddress;
    DWORD dwUserAddrHigh        = (DWORD)stSysInf.lpMaximumApplicationAddress;
    DWORD dwWalkAddr            = dwUserAddrLow;
    DWORD dwVQueryRet           = 0;

    while(dwWalkAddr < dwUserAddrHigh)
    {
        dwVQueryRet             =    VirtualQuery((PVOID)dwWalkAddr
                                            , &st_MemBasicInfor
                                            , sizeof(MEMORY_BASIC_INFORMATION));

        if(dwVQueryRet == 0)        // unaccessable memory; 
        {
            dwWalkAddr += st_MemBasicInfor.RegionSize;
            continue;
        }
        
        //printf("Section: %-10p, Size: %-10p\n", (PVOID)dwWalkAddr, st_MemBasicInfor.RegionSize);
        dwWalkAddr                += st_MemBasicInfor.RegionSize;
        
    }
 

 

posted on 2013-01-31 09:11  All IN  阅读(147)  评论(0)    收藏  举报

导航