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

本文共 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/3846202.html

你可能感兴趣的文章
常见电脑桌面图标问题十则
查看>>
Nginx 502 Bad Gateway错误的解决办法
查看>>
田经理您看看这博客的效果如何?还不错吧
查看>>
VC++文件拖拽功能实现drag
查看>>
LinuxCast Linux 使用RAID提升磁盘速度及冗余性 视频教程笔记
查看>>
雷人国产剧剧情
查看>>
Linux系统开机启动过程
查看>>
linux Mint 初次安装,无法用ssh客户端连接
查看>>
iOS 捕获全局异常,统一收集
查看>>
Mastering Symfony2 Performance – Doctrine
查看>>
Python模块之StringIO
查看>>
Cookie学习-------介绍
查看>>
Windows Server 2012 Hyper-V新特性(1)
查看>>
gifflen 调用以及错误处理
查看>>
华为的IPsec ×××(野蛮模式)
查看>>
查杀IPZ2.EXE病毒实战
查看>>
DHCP试验
查看>>
SAE Django如何禁止外部IP访问
查看>>
Eclilpse 开发Ext JS卡住
查看>>
JSP的两种include
查看>>