程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> ReadProcessMemory 函數的一個 bug!

ReadProcessMemory 函數的一個 bug!

編輯:.NET實例教程

今天寫如下代碼時,發現目標進程 QQ.exe 的內存使用量從 20 mb 一直狂升至 120mb.開始懷疑是讀取了不存在的內存失敗,但被否決了,因為一般進程的用戶區內存 90% 都是不可讀的

根據猜測,很有可能是加載的 DLL 被復制了一份,即開啟了 寫時復制  機制,但是只是讀取操作,沒有任何寫入操作呀,怎麼會引發寫時復制呢?難道是MIcrosoft的又一個 bug?

目標進程 QQ.exe 所有加載的dll的內存占用量跟多增加的這 100MB 也很吻合!

LPCSTR lpStartMemory;
 BYTE lpBuf[4096];
 DWord wlen;
 BOOL ret;

 DWord pid=GetPidByName("QQ.exe");
 HANDLE hProcess=OpenProcess(PROCESS_VM_READ,FALSE,pid);

 FILE* fp=fopen("QQ.dat","wb");

 for(lpStartMemory=0;lpStartMemory<(LPCSTR)0x80000000;lpStartMemory+=4096)
 {
  ret=ReadProcessMemory(hProcess,lpStartMemory,lpBuf,4096,&wlen);
  if(ret==TRUE && wlen==4096)
  {
   fwrite(lpBuf,1,4096,fp);
  }
 }
 fclose(fp);
 CloseHandle(hProcess); 



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved