操作系统 实验十一

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验11 windows虚拟内存实验

一,实验目的

了解windows虚拟内存的基本信息

了解windows虚拟内存的解构信息

二,实验内容

1,进入windows 7

2,使用vs

3,新建文件

代码段如下:

#include

#include

#include

#include

#include

#pragma comment(lib,"Shlwapi.lib")

inline bool TestSet(DWORD dwTarget,DWORD dwMask)

{

return((dwTarget &dwMask)==dwMask);

}

#define SHOWMASK(dwTarget,type)\

if(TestSet(dwTarget,PAGE_##type))\

{std::cout<<","<<#type;}

void ShowProtection(DWORD dwTarget)

{

SHOWMASK(dwTarget,READONL Y);

SHOWMASK(dwTarget,GUARD);

SHOWMASK(dwTarget,NOCACHE);

SHOWMASK(dwTarget,READWRITE);

SHOWMASK(dwTarget,WRITECOPY);

SHOWMASK(dwTarget,EXECUTE);

SHOWMASK(dwTarget,EXECUTE_READ);

SHOWMASK(dwTarget,EXECUTE_READWRITE);

SHOWMASK(dwTarget,EXECUTE_WRITECOPY);

SHOWMASK(dwTarget,NOACCESS);

}

void WalkVM(HANDLE hProcess)

{

SYSTEM_INFO si;

::ZeroMemory(&si,sizeof(si));

::GetSystemInfo(&si);

MEMORY_BASIC_INFORMATION mbi;

::ZeroMemory(&mbi,sizeof(mbi));

LPCVOID pBlock=(LPVOID) si.lpMinimumApplicationAddress; while(pBlock

{

if(::VirtualQueryEx(

hProcess,

pBlock,

&mbi,

sizeof(mbi))==sizeof(mbi))

{

LPVOID pEnd=(PBYTE)pBlock+mbi.RegionSize;

TCHAR szSize[MAX_PATH];

::StrFormatByteSize(mbi.RegionSize,szSize,MAX_PATH);

std::cout.fill('0');

std::cout

<

<<"-"

<

<<(::strlen(szSize)==7?"(":"(")<

<<")";

switch(mbi.State)

{

case MEM_COMMIT:

std::cout<<"Committed";

break;

case MEM_FREE:

std::cout<<"Free";

break;

case MEM_RESERVE:

std::cout<<"Reserved";

break;

}

if(mbi.Protect==0&&mbi.State!=MEM_FREE)

{

mbi.Protect=PAGE_READONL Y;

}

ShowProtection(mbi.Protect);

switch(mbi.Type)

{

case MEM_IMAGE:

std::cout<<",Image";

break;

case MEM_MAPPED:

std::cout<<",Mapped";

break;

case MEM_PRIV A TE:

std::cout<<",Private";

break;

}

TCHAR szFilename[MAX_PATH];

if(::GetModuleFileName(

(HMODULE) pBlock,

szFilename,

MAX_PATH)>0)

{

::PathStripPath(szFilename);

std::cout<<",Module:"<

}

std::cout<

pBlock=pEnd;

}

}

}

void main()

{

::WalkVM(::GetCurrentProcess());

getchar();

}

实验结果截图:

相关文档
最新文档