- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
堆内存破坏检测实战堆内存破坏检测实战
堆内存破坏检测实战--附完整调试过程首先解释一下,什么是堆内存?堆是一种常见的内存管理器,应用程序通过堆来动态地分配和释放内存,通常使用堆的情况是无法预先知道所需要的内存大小,或者申请内存太大,无法通过栈内存来自动分配,下面让我们再来看一段英文解释。A heap is a form of memory manager that an application can use when it needs to allocate?and free memory dynamically. Common situations that call for the use of a heap?are when the size of the memory needed is not known ahead of time and the size of?the memory is too large to neatly fit on the stack (automatic memory).常见的情况是由于效率或特殊需求一个进程中同时使用几个堆,如下图:??下面通过一个完整的demo来带大家调试一个对破坏问题,demo代码如下:#define SZ_MAX_LEN? 10void?__cdecl?wmain?(int?argc,?WCHAR*?args[]){????if(argc==2)????{????????wprintf(LPress?any?key?to?start\n);????????_getch();????????DupString(args[1]);????}????else????{????????wprintf(LPlease?enter?a?string);????}}BOOL?DupString(WCHAR*?psz){????BOOL?bRet=FALSE;????????if(psz!=NULL)????{????????pszCopy=(WCHAR*)?HeapAlloc(GetProcessHeap(),?0,?SZ_MAX_LEN*sizeof(WCHAR));????????if(pszCopy)????????{????????????wcscpy(pszCopy,?psz);????????????wprintf(LCopy?of?string:?%s,?pszCopy);????????????HeapFree(GetProcessHeap(),?0,?pszCopy);????????????bRet=TRUE;????????}????}????return?bRet;?在应用程序验证器下启用普通页堆,配置gflags,?运行build出来的代码,输入参数为:SolidmangoSolidmangoSolidmango得到如下输出:CommandLine:?C:\WinXP.x86.chk\06overrun.exe?SolidmangoSolidmangoSolidmangoExecutable?search?path?is:?ModLoad:01005000???06overrun.exeModLoad:?7c900000?7c9b2000???ntdll.dllAVRF:?06overrun.exe:?pid?0x120C:?flags?0x8044B026:?application?verifier?enabledModLoad:?5ad10000?5ad59000???C:\WINDOWS\System32\verifier.dllModLoad:10029000???C:\WINDOWS\System32\vrfcore.dllModLoad:?003a0000?003dc000???C:\WINDOWS\System32\vfbasics.dllModLoad:?7c800000?7c8f6000???C:\WINDOWS\system32\kernel32.dllAVRF:?verifier.dll?provider?initialized?for?06overrun.exe?with?flags?0x8044B026?ModLoad:?77c10000?77c68000???C:\WINDOWS\system32\msvcrt.dll(120c.1700):?Break?instruction?exception?-?code(first?chance)eax=00391ec4?ebx=7ffd8000?ecxedxesi=00391f98?edi=00391ec4eip=7
文档评论(0)