读取其他进程内存

    DWORD dwAddress = strtoul(m_strAddress, 0, 16);
    


    char *pBuff = new char[m_nSize];
    HANDLE hProcess = NULL;
    DWORD dwReadBytes = 0;
    if (pBuff == NULL)
    {
        goto SAFE_EXIT;
    }


    //1. 根据进程ID打开进程
    //2. ReadProcessMemory
    //3. closehandle
    hProcess = ::OpenProcess(PROCESS_ALL_ACCESS, 
                                    FALSE, 
                                    m_dwProcessId);
    if (hProcess == NULL)
    {
        goto SAFE_EXIT;
    }


    if (::ReadProcessMemory(hProcess, 
                            (LPCVOID)dwAddress, 
                            pBuff,
                            m_nSize,
                            &dwReadBytes))
    {
        if (dwReadBytes != (DWORD)m_nSize)
        {
            AfxMessageBox("读取数据异常");
        }


        m_strEdit3.Empty();
        m_strEdit4.Empty();


        //显示数据
        for (int i = 0; i < m_nSize; i++)
        {
            if (pBuff[i] == '\0')
            {
                m_strEdit4 += '.';
            }
            else
            {
                m_strEdit4 += pBuff[i]; 
            }


            unsigned char chTemp = pBuff[i];
            CString strFmt;
            strFmt.Format("%02X ", chTemp);
            m_strEdit3 += strFmt;
        }
    }
    else
    {
        AfxMessageBox("读取失败");
    }


    UpdateData(FALSE);


SAFE_EXIT:
    if (pBuff != NULL)
    {
        delete[] pBuff;
        pBuff = NULL;
    }
    if (hProcess != NULL)
    {
        CloseHandle(hProcess);
    } 

你可能感兴趣的:(MFC)