博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内存管理3 - Win32汇编语言056
阅读量:5757 次
发布时间:2019-06-18

本文共 1608 字,大约阅读时间需要 5 分钟。

内存管理3

 

让编程改变世界

Change the world by program


 

可丢弃的内存块

  分配可移动内存块的时候需要使用 GMEM_MOVEABLE 标志,如果同时配合使用 GMEM_DI SCARDABLE 标志的话,这样生成的内存块是可丢弃的内存块。 表示当Windows急需内存使用的时候,可以将它从物理内存中丢弃,可丢弃的内存块首先必须是可移动的内存块。  

函数调用如下:

invoke GlobalAlloc, GHND or GMEM_DISCARDABLE, dwBytes
.if eax

mov hMemory, eax

.endif   当用GlobalLock锁定内存的时候如果返回NULL指针,表示内存已经被Windows丢弃了。 当然其中的数据也丢失了,程序需要重新生成数据。 另外需要注意的是当内存块被丢弃的时候,内存句柄还是有效的,如果程序还要使用这个句柄,那么可以对它使用GlobalReAlloc函数来重新分配内存。   当可丢弃内存块的锁定计数为0时,程序也可以使用GlobalDiscard函数主动将它丢弃,这和Windows将它丢弃的效果是一样的:

invoke GlobalDiscard, hMemory

 

使用内存函数时有两个地方需要特别注意

 

第一个需要注意的地方是:

  NULL指针的检测——GlobalAlloc函数和GlobalLock函数都可以返回内存指针,在使用指针前一定要检测它的有效性。 如果使用了函数执行失败而返回的NULL指针来访问数据,会导致程序越权访问不该访问的地方,从而被Windows毫不留情地终止掉。 这就是例子代码中总是有个if语句来判断eax是否为NULL的原因。  

第二个需要注意的地方是:

  注意访问越界问题,越界操作也会引起越权访问,千万不要到超出内存块长度的地方去访问。 例如,使用lstrcpy之类的函数处理字符串之前,先用lstrlen检测字符串长度是一个好习惯。 补充:lstrcpy函数事实上是很多溢出漏洞的根源,该函数作用是复制一个字符串到缓冲区。

LPTSTR lstrcpy(LPTSTR lpString1, LPCTSTR lpString2);

 

一些不安全因素

  在微软产品的安全漏洞中,有很大一部分是由于不正确的使用C动态库(C Runtime Library)?的函数,特别是有关字符串处理的函数导致的。 证据请看下表: [caption id="attachment_477" align="aligncenter" width="300"] 微软产品的安全漏洞[/caption]   在这里小甲鱼列出其中的一部分特别尤其不安分的因素,以便大家日后编程对那些”有威胁性”的API函数有所警惕,要么使用安全函数替代,要么自行进行必要的检查等。 有关完整的危险API的禁用列表,可以参见:http://msdn.microsoft.com/en-us/library/bb288454.aspx [caption id="attachment_478" align="aligncenter" width="300"] 危险API的禁用列表[/caption]  

StrSafe函数和SafeCTR函数

  下边通过一些栗子给大家介绍一下这两种函数如何替代不安全的API函数,有兴趣的朋友可以听听哈~  
使用StrSafe()
使用SafeCRT()   另外纯C语言也有好多函数编程的时候需要你多留点心眼儿: [buy]   [/buy] [Downlink href='http://kuai.xunlei.com/d/BdsUAwrTHwBnT7JS44d']视频下载[/Downlink]

转载于:https://www.cnblogs.com/LoveFishC/archive/2012/08/02/3847181.html

你可能感兴趣的文章
mysql实战02 | 日志系统:一条SQL更新语句是如何执行的?
查看>>
测试九 赛后感受
查看>>
ECC椭圆曲线详解(有具体实例)
查看>>
关于WechatApp学习总结
查看>>
Linux常见命令(二)
查看>>
PyCharm切换解释器
查看>>
jmp far ptr s所对应的机器码
查看>>
css详解1
查看>>
【转载】Presentation at from Yoshua Bengio
查看>>
MySQL类型转换
查看>>
HashSet HashMap 源码阅读笔记
查看>>
变量声明提升1
查看>>
轻量级的Java 开发框架 Spring
查看>>
JS之路——浏览器window对象
查看>>
Chrome教程(二)使用ChromeDevTools命令菜单运行命令
查看>>
数据结构及算法基础--快速排序(Quick Sort)(二)优化问题
查看>>
你对position的了解到底有多少?
查看>>
随笔2013/2/19
查看>>
Windows Phone的Silverlight Toolkit 安装及其使用
查看>>
DBS:同学录
查看>>