zoukankan      html  css  js  c++  java
  • 【VC++积累】之一、搜索内存

    搜索到内存然后修改它,就像金山游侠游戏修改器。


    BOOL FindFirst(DWORD dwValue);
    BOOL FindNext(DWORD dwValue);
    DWORD g_arList[1024];
    int g_nListCnt;
    HANDLE g_hProcess;

    FindFirst进行第一次搜索,然后将搜索到的地址保存在g_arList中,地址的个数记录在g_nListCnt中。
    然后检查g_nListCnt的值,如果大于1 那么就说明搜索到的地址多于1个。

    然后来修改,调用FindNext函数,它在g_arList中查找,并更新,并将地址的个数写到g_nListCnt中
    然后检查g_nListCnt  直到最终g_nListCnt等于1为止。


    BOOL FindFirst(DWORD dwValue)
    {
             constDWORD dwOneGB = 1024*1024*1024;        //1GB
             constDWORD dwOnePage = 4*1024;              //4KB
             if(g_hProcess== NULL)
                       returnFALSE;
             
             //查看操作系统类型,以决定开始地址
             DWORDdwBase;
             OSVERSIONINFOvi = { sizeof(vi) };
             ::GetVersionEx(&vi);
             if(vi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
                       dwBase= 4*1024*1024;                   //Windows 98系列,4MB     
             else
                       dwBase= 640*1024;                 // Windows NT系列,64KB
             //在开始地址到2GB的地址空间进行查找
             for(;dwBase < 2*dwOneGB; dwBase += dwOnePage)
             {
                       //比较1页大小的内存
                       CompareAPage(dwBase,dwValue);
             }
             returnTRUE;
    }

    BOOL FindNext(DWORD dwValue)
    {
            // 保存m_arList数组中有效地址的个数,初始化新的m_nListCnt值
            int nOrgCnt = g_nListCnt;
            g_nListCnt = 0;        
    
            // 在m_arList数组记录的地址处查找
            BOOL bRet = FALSE;        // 假设失败        
            DWORD dwReadValue;
            for(int i=0; i<nOrgCnt; i++)
            {
                    if(::ReadProcessMemory(g_hProcess, (LPVOID)g_arList[i], &dwReadValue, sizeof(DWORD), NULL))
                    {
                            if(dwReadValue == dwValue)
                            {
                                    g_arList[g_nListCnt++] = g_arList[i];
                                    bRet = TRUE;
                            }
                    }
            }
            
            return bRet;
    }
    


    2012/8/5

    jofranks 于南昌

  • 相关阅读:
    HTML DOM 06 节点关系
    HTML DOM 05 事件(三)
    HTML DOM 05 事件(二)
    HTML DOM 05 事件(一)
    html DOM 04 样式
    html DOM 03 节点的属性
    html DOM 02 获取节点
    html DOM 01 节点概念
    JavaScript 29 计时器
    JavaScript 28 弹出框
  • 原文地址:https://www.cnblogs.com/java20130723/p/3211435.html
Copyright © 2011-2022 走看看