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; } |
分类:
WIN API学习笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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 接口并集成到在线客服系统