windows api学习笔记-读写其他进程的内存

#include <windows.h>
#include <iostream>
using namespace std;
 
 
HANDLE g_hProcess;
 
BOOL ChangeMemory(DWORD dwValue)
{
    const DWORD dwOneGB = 1024*1024*1024;//1GB
    const DWORD dwOnePage = 4*1024;//4KB
    if(g_hProcess == NULL)
    {
        cout<<"打开进程失败"<<endl;
        return false;
    }
    DWORD dwBase = 64*1024;//winNT为应用程序预留的是640KB到2GB的地址空间
    for(;dwBase<2*dwOneGB;dwBase += dwOnePage)
    {
        BYTE arBytes[4096];//一页内存4KB
        if(!::ReadProcessMemory(g_hProcess,(LPVOID)dwBase,arBytes,4096,NULL))//最后一个参数是返回的实际读取的字节数
        {
            cout<<"此页内存不可读"<<endl;
            return false;
        }
        DWORD* pdw;
        for(int i=0;i<(int)4*1024-3;i++)
        {
            pdw = (DWORD*)&arBytes[i];
            if(pdw[0] == 2600)
            {
                ::WriteProcessMemory(g_hProcess,(LPVOID)(dwBase+i),&dwValue,sizeof(DWORD),NULL);//最后一个参数是成功写入的字节数
            }
        }
    }
    return true;
}
int main()
{
    PROCESS_INFORMATION pi;
    char szCommandLine[] = "cmd";
    STARTUPINFO si;
    ::ZeroMemory(&si,sizeof(si));
    si.cb = sizeof(si);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = TRUE;
    BOOL bRet = ::CreateProcess(
        NULL,
        szCommandLine,
        NULL,
        NULL,
        FALSE,
        CREATE_NEW_CONSOLE,
        NULL,
        NULL,
        &si,
        &pi
        );
    if(bRet)
    {
        cout<<"创建进程成功,注意新进程的win版本号"<<endl;
        g_hProcess = ::OpenProcess(PROCESS_ALL_ACCESS,FALSE,pi.dwProcessId);
        ChangeMemory(9999);
        ::Sleep(6000);
    }
    ::CloseHandle(pi.hThread);
    ::CloseHandle(pi.hProcess);
    char a;
    cin>>a;
}
posted @   liulun  阅读(847)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示