ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:36.14KB ,
资源ID:16458483      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16458483.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验3虚拟存储器Word文档格式.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验3虚拟存储器Word文档格式.docx

1、PAGE_NOACCESS,PAGE_READONLY,PAGE_READWRITE和PAGE_EXECUTE_READDWORD RegionSize 虚拟内存区域的字节数DWORD State 区域的当前分配状态。其可能值为MEM_COMMIT,MEM_FREE和MEM_RESERVEDW()RD Protect虚拟内存当前区域的保护属性。可能值与AllocationProtect成员的相同DWORD Type虚拟内存区域中出现的页面类型。可能值为MEM_IMAGE,MEM_ MAPPED和MEM_PRIVATE表2 虚拟内存的APIAPl名称描 述VirtualQueryEx()通过填充

2、MEMORY_BASIC_INFORMATION结构检测进程内虚拟内存的区域VirtuaAlloc()保留或调配进程的部分虚拟内存,设置分配和保护标志VirtualFree()释放或收回应用程序使用的部分虚拟地址VirtualProtect()改变虚拟内存区域保护规范VirtualLock() 防止系统将虚拟内存区域通过系统交换到页面文件中VirtualUnlock()释放虚拟内存的锁定区域,必要时,允许系统将其交换到页面文件中 提供虚拟内存分配功能的是VinualAlloc()API。该API支持用户向系统要求新的虚拟内存或改变已分配内存的当前状态。用户若想通过VirtualAlloc()函

3、数使用虚拟内存,可以采用两种方式通知系统:1)简单地将内存内容保存在地址空间内。2)请求系统返回带有物理存储区(RAM的空间或换页文件)的部分地址空间。用户可以用flAllocation Type参数(commit和reserve)来定义这些方式,用户可以通知Windows按只读、读写、不可读写、执行或特殊方式来处理新的虚拟内存。与VirtualAlloc()函数对应的是VirtualFree()函数,其作用是释放虚拟内存中的已调配页或保留页。用户可利用dwFreeType参数将已调配页修改成保留页属性。VirtualProtect()是VirtualAlloc()的一个辅助函数,利用它可以改

4、变虚拟内存区的保护规范。2 实验目的1)通过实验了解Windows内存的使用,学习如何在应用程序中管理内存,体会Windows应用程序内存的简单性和自我防护能力。2)学习检查虚拟内存空间或对其进行操作。3)了解Windows的内存结构和虚拟内存的管理,进而了解进程堆和Windows为使用内存而提供的一些扩展功能。3 实验内容与步骤虚拟内存的检测清单2所示的程序使用VirtualQueryEX()函数来检查虚拟内存空间。步骤1:在“开始”菜单中单击“程序”、 “Microsoft Visual Studio 60”、“MicrosoftVisualC+60”,进入VisualC+窗口。步骤2:运

5、行以下程序清单清单2 检测进程的虚拟地址空间#includeiostreamshlwapi.hiomanip#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,#ty

6、pe;void ShowProtection(DWORD dwTarget) SHOWMASK(dwTarget,READONLY); 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,E

7、XECUTE_WRITECOPY); SHOWMASK(dwTarget,NOACCESS);/遍历整个虚拟内存并对用户显示其属性的工作程序的方法void WalkVM(HANDLE hProcess) /首先,获得系统信息 SYSTEM_INFO si; :ZeroMemory(&si,sizeof(si);GetSystemInfo(&si); /分配要存放信息的缓冲区 MEMORY_BASIC_INFORMATION mbi;mbi,sizeof(mbi); /循环整个应用程序地址空间 LPCVOID pBlock=(LPVOID)si.lpMinimumApplicationAddre

8、ss; while(pBlocksi.lpMaximumApplicationAddress) /获得下一个虚拟内存块的信息 if(:VirtualQueryEx( hProcess, /相关的进程 pBlock, /开始位置 &mbi, /缓冲区 sizeof(mbi)=sizeof(mbi) /大小的确认 /计算块的结尾及其大小 LPCVOID pEnd=(PBYTE)pBlock+mbi.RegionSize; TCHAR szSizeMAX_PATH; :StrFormatByteSize(mbi.RegionSize,szSize,MAX_PATH); /显示块地址和大小 std:c

9、out.fill(0);std:hexsetw(8)(DWORD)pBlock- (DWORD)pEnd(strlen(szSize)=7?()szSize0) /除去路径并显示 :PathStripPath(szFilename);,Module:szFilename;endl; /移动块指针以获得下一个块 pBlock=pEnd; void main() /遍历当前进程的虚拟内存WalkVM(:GetCurrentProcess();清单2中显示一个WalkVM()函数开始于某个进程可访问的最低端虚拟地址处,并在其中显示各块虚拟内存的特性。虚拟内存中的块由VirtualQueryEx()A

10、Pl定义成连续块或具有相同状态(自由区、已调配区等)的内存,并分配以一组统一的保护标志(只读、可执行等)。回答下列问题:1) 分析运行结果committed、reserved、free分别表示什么含义?答:虚拟内存的已调配区、虚拟内存的保留区、虚拟内存的自由区按committed、reserved、free等三种虚拟地址空间分别记录实验数据,其中“描述”是指对该组数据的简单描述,例如,对下列一组数据:0001000000012000Committed,READWRITE,Private可描述为:具有READWRITE权限的已调配私有内存区。将系统当前的自由区(free)虚拟地址空间填入表1中。

11、(表格可以自己画,通过把运行结果复制到word中文字转换成表格)表1 实验记录地址大小虚拟地址空间类型访问权限描述(type)00012000-0002000056.0KBfreeNOACCESS00021000-0003000060.0KB00133000-0014000052.0KB00276000-0028000040.0KB002C1000-002D000060.0KB00311000-0032000000326000-0033000000371000-0038000000391000-003A00000031A000-003B0000003C3000-003D0000003E0000

12、-00400000128KB00485000-0049000044.0KB00558000=0056000032.0KB00663000-00670000NOACCCESS00970000-62C200001.53GB62C29000-73FA0000275MB1400B000-7630000034.9MB7631D000-77BE000024.7MB77C38000-77D10000864KB77E49000-77E5100028.0KB77EE3000-77EF000077F39000-77F40000将系统当前的已调配区 (committed) 虚拟地址空间填入表2中。表2 实验记录00

13、010000-000120008.00 KBcommittedREADWRITEPrivate00020000-000210004.00 KB0012c000-0012d000GUARD,READWRITE0012d000-0013000012.0 KB00130000-00133000READONLYMapped00140000-0014500020.0 KB00240000-0024600024.0 KB00250000-0025300000260000-0027600088.0 KB00280000-002c1000260 KB002d0000-0031100000320000-0032

14、600000330000-0037100000380000-0038800032.0 KB00390000-00391000003a0000-003a1000003b0000-003b400016.0 KB003c0000-003c3000003d0000-003d300000400000-00401000Image,Module:03.exe00401000-00470000444 KBEXECUTE_READImage00470000-0047800000478000-0047b0000047b000-0047d000WRITECOPY0047d000-00481000将系统当前的保留区

15、(reserved) 虚拟地址空间填入表3中。表3 实验记录00030000-0012c0000.98MBreserved00145000-0024000000246000-0025000040.KB00253000-0026000000388000-00390000003b4000-003c000048.0KB003d3000-003e000000495000-00550000748KB00552000-0055800024.0KB006d5000-009700002.60MB2) 从上述输出结果,对照分析程序,请简单描述程序运行的流程:该程序,从主函数出发,调用void WalkVM(HA

16、NDLE hProcess)函数,void WalkVM(HANDLE hProcess)函数先得系统信息,再分配应用程序地址空间,接下来就是做循环函数内做循环:首先每次获得下一个虚拟程序内存的信息计算块的结尾及其大小,然后再显示块的大小与位置,及其状态,显示保护方式显示类型,检查可执行的影像除去文件名的路径并将文件名显示出来移动块指针以获得下一个块,从新做循环。3) 实验总结(根据实验结果及自己查阅相关资料写出VirtualAlloc()函数的作用,各个参数的可能值及含义。列出对虚拟内存的认识)通过本次实验,体会学习检查虚拟内存空间或对其进行操作,windows2000的内存采用,进而了解进

17、程和windows为使用内存而提供的一些扩展功能。虚拟内存是计算机系统内存管理的一种技术。它使得应用成粗认为它拥有连续的可用的内存,而实际上,它通常是被隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。virtualalloc是可以自己控制页面的保留,提交,释放的实际的。实际上我们申请的内存没有使用的时候,都是被放在内存页面中,在使用的时候才会被切换到真正的物理存储器里。可能的数值含义MEM_COMMIT为0x1000分配指定保留的内存页的物理存储在内存或磁盘上的分页文件。该函数的内存初始化为零。 保留并承诺在一个步骤的页面,调用VirtualAlloc 的MEM_COMMIT | MEM_RESERVE 。该函数将失败,如果你尝试提交一个还没有被保留页。由此产生的错误代码是ERROR_INVALID_ADDRESS。尝试提交一个已经提交的页面不会导致函数失败。这意味着你可以承诺不首先确定当前承诺在每一页的状态页面。MEM_RESERVE0x2000保留在没有任何实际的物理存储在内存或磁盘上的分页文件分配一个进程的虚拟地址空间的范围。你可以提交保留页的后续调用 VirtualAlloc的功能。保留并承诺在一个步骤的页面,调用VirtualAlloc 的 MEM_COMMIT | MEM_RESERVE 。内存分配的功能,如其他的malloc和 Lo

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1