从内存释放软件的原理到虚拟内存

从内存释放软件的原理到虚拟内存

ID:6321360

大小:103.50 KB

页数:6页

时间:2018-01-10

从内存释放软件的原理到虚拟内存_第1页
从内存释放软件的原理到虚拟内存_第2页
从内存释放软件的原理到虚拟内存_第3页
从内存释放软件的原理到虚拟内存_第4页
从内存释放软件的原理到虚拟内存_第5页
资源描述:

《从内存释放软件的原理到虚拟内存》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、从内存释放软件的原理到虚拟内存By:乱雪某日,群里某人提问如何实现内存释放功能,便引起了我的兴趣。从网上下载了一款内存释放软件进行逆向分析。由于逆向细节不符合本文主题,所以省略之。逆向后发现,该程序核心部分——即内存释放功能,是调用了SetProcessWorkingSetSize()函数。此函数在MSDN描述如下:“Setstheminimumandmaximumworkingsetsizesforthespecifiedprocess”,中文意思是:设置进程的最大最小工作空间。此话什么意思?这里涉及到虚拟内存的概念,只要掌握到这个概念后,就能明白这句话的意思了。虚拟内存,是现代操作

2、系统中一个比较重要的概念。现在的物理内存大小(即内存条本身容量)已经不能满足应用软件的需求了。为了解决物理内存空间紧张的问题,便引入了虚拟内存的概念,将外部存储设备用来当作内存的一部分,通常用的是硬盘。一个程序运行时,其实并不是所有代码都在内存中,有一部分暂时不执行的代码将会存入硬盘中,并以“页”为单位存储,留下重要部分在内存中执行。操作系统已经将内存分割成一块一块的装入或者换出内存了,这个叫“分页”,换出和装入是以“页”为单位进行的。可以这样理解“页”,一个练习小子的小字本每页有若干个方格子,但是每页的格子数是一样的。在Windows系统中,每页的大小默认是4KB,有若干“页”。但是

3、页面的装入和换出是CPU和硬盘之间的操作,大家都知道CPU直接读取硬盘的操作是非常慢的,所以装入页面时也会较慢,为了不频繁装入和换出,操作系统需要一系列的算法进行调度,关于此细节比较复杂,不作叙述。大家应该有过这样的经验,当在一台配置不是很高的机器上打游戏时,将游戏从全屏缩小后继续恢复全屏,会有一小段时间的卡死状态,而且某些游戏缩小后就没有了背景音乐。这两点很好解释,其实游戏缩小时,已经将不需要执行的代码换出到硬盘空间中了,所以有些游戏缩小后听不见背景音乐;而重新恢复到游戏状态时,需要将那些换出的代码再次装入内存,前面说了,CPU和硬盘交互是很慢的,便出现了暂时性的缓慢状态。我们可以做

4、个实验来观察一下Windows的这个机制。我以写本稿的WORD为例,在缩小前,它的内存占用约47M,如图1:图1我将WORD缩小后,再观察它的内存大小,如图2,一下就变来只有1M多了:图2其余的哪里去了?便正是交换到硬盘空间里了。这便是程序的后台运行。所以,我们可以得出这样的结论,减少程序内存占用的大小,可以让它把不必要的代码交换到硬盘空间里,只将运行该程序的关键代码留在内存中,但是一旦程序激活,它们又将会换入内存。而SetProcessWorkingSetSize()函数正是这样的功能,应该明白了“设置进程的最大最小工作空间”这句话了吧?就是设置进程占用内存的空间大小。这个函数的原型

5、如下,以下涉及到写代码部分,倘若看不懂,可以略过代码,我会写下思路。BOOLSetProcessWorkingSetSize(HANDLEhProcess,SIZE_TdwMinimumWorkingSetSize,SIZE_TdwMaximumWorkingSetSize);一个个来解释参数,第一个参数hProcess,它的类型是HANDLE,即指定一个进程的句柄;第二个参数dwMinimumWorkingSetSize和第三个参数dwMaximumWorkingSetSize分别是设置程序运行空间的最小和最大空间。我们再仔细看MSDN,有这样一句话“IfbothdwMinimumW

6、orkingSetSizeanddwMaximumWorkingSetSizehavethevalue(SIZE_T)–1,thefunctionremovesasmanypagesaspossiblefromtheworkingsetofthespecifiedprocess.”,大概中文意思是如果将dwMinimumWorkingSetSize和dwMaximumWorkingSetSize设置成-1,就保留必要的一部分代码,其余的交换出去。这正是我们需要的。了解了这个函数后,我们来编写一个程序,程序的功能就是将指定进程的内存释放出去。代码如下:#include#

7、include#include///////////////////////////////////////////////////////////////////////////by:乱雪/////email:lx#shellcodes.org/////功能:SetProcessWorkingSetSize函数演示//////////////////////////////////////////

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。