-
-
[求助]ReadProcessMemory 函数的一个 bug!
-
发表于:
2007-11-12 11:23
5505
-
[求助]ReadProcessMemory 函数的一个 bug!
今天写如下代码时,发现目标进程 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);
MyBlog:
286K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0D9L8$3N6Q4x3X3g2U0M7$3c8F1i4K6u0W2L8X3g2@1i4K6u0r3M7$3E0&6K9%4u0F1L8l9`.`.
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课