ImageVerifierCode 换一换
格式:DOCX , 页数:6 ,大小:46.82KB ,
资源ID:8049442      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

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

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(堆内存破坏检测实战.docx)为本站上传会员【s4****5z】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

堆内存破坏检测实战.docx

1、堆内存破坏检测实战--附完整调试过程 首先解释一下,什么是堆内存? 堆是一种常见的内存管理器,应用程序通过堆来动态地分配和释放内存,通常使用堆的情况是无法预先知道所需要的内存大小,或者申请内存太大,无法通过栈内存来自动分配,下面让我们再来看一段英文解释。 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 a

2、re 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  10 void __cdecl wmain (int argc, WCHAR* args

3、[]) {     if(argc==2)     {         wprintf(L"Press any key to start\n");         _getch();         DupString(args[1]);     }     else     {         wprintf(L"Please enter a string");     } } BOOL DupString(WCHAR* psz) {     BOOL bRet=FALSE;          if(psz!=NULL)     {         ps

4、zCopy=(WCHAR*) HeapAlloc(GetProcessHeap(), 0, SZ_MAX_LEN*sizeof(WCHAR));         if(pszCopy)         {             wcscpy(pszCopy, psz);             wprintf(L"Copy of string: %s", pszCopy);             HeapFree(GetProcessHeap(), 0, pszCopy);             bRet=TRUE;         }     }     return

5、 bRet;   在应用程序验证器下启用普通页堆,配置gflags, 运行build出来的代码, 输入参数为:SolidmangoSolidmangoSolidmango 得到如下输出: CommandLine: C:\WinXP.x86.chk\06overrun.exe SolidmangoSolidmangoSolidmango Executable search path is:  ModLoad: 01000000 01005000   06overrun.exe ModLoad: 7c900000 7c9b2000   ntdll.dll AVRF: 06

6、overrun.exe: pid 0x120C: flags 0x8044B026: application verifier enabled ModLoad: 5ad10000 5ad59000   C:\WINDOWS\System32\verifier.dll ModLoad: 10000000 10029000   C:\WINDOWS\System32\vrfcore.dll ModLoad: 003a0000 003dc000   C:\WINDOWS\System32\vfbasics.dll ModLoad: 7c800000 7c8f6000   C:\WINDOWS

7、\system32\kernel32.dll AVRF: verifier.dll provider initialized for 06overrun.exe with flags 0x8044B026  ModLoad: 77c10000 77c68000   C:\WINDOWS\system32\msvcrt.dll (120c.1700): Break instruction exception - code 80000003 (first chance) eax=00391ec4 ebx=7ffd8000 ecx=00000004 edx=00000010 esi=0039

8、1f98 edi=00391ec4 eip=7c90120e esp=0006fb20 ebp=0006fc94 iopl=0         nv up ei pl nz na po nc cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202 ntdll!DbgBreakPoint: 7c90120e cc              int     3 0:000> g0:000> g   我们会看到一个访问违例, 继续运行得到如下输出,说明应用程序验证器验证成功:

9、 VERIFIER STOP 00000008: pid 0x120C: Corrupted heap block.      00081000 : Heap handle used in the call.     001E2B60 : Heap block involved in the operation.     00000014 : Size of the heap block.     00000000 : Reserved ================================

10、 This verifier stop is not continuable. Process will be terminated  when you use the `go' debugger command. ======================================= (120c.1700): Break instruction exception - code 80000003 (first chance) eax=1000e848 ebx=1000cd44 ecx=00000001 edx=0006f939 esi=00000000 edi

11、1000e848 eip=7c90120e esp=0006f9cc ebp=0006fbd0 iopl=0         nv up ei pl nz na po nc cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202 ntdll!DbgBreakPoint: 7c90120e cc              int     3   继续调试,此时我们已经找到了出问题的堆快,注意观察上面的输出中有这样一条语句: 001E2B60 : Heap block invol

12、ved in the operation,好的,让我们看看这个堆块里面是什么东西, 0:000> dt _DPH_BLOCK_INFORMATION 001E2B60-0x20 ntdll!_DPH_BLOCK_INFORMATION    +0x000 StartStamp       : 0xabcdaaaa    +0x004 Heap             : 0x80081000 Void    +0x008 RequestedSize    : 0x14    +0x00c ActualSize       : 0x3c    +0x010 FreeQueue 

13、       : _LIST_ENTRY [ 0x1e - 0x0 ]    +0x010 TraceIndex       : 0x1e    +0x018 StackTrace       : 0x00286c3c Void    +0x01c EndStamp         : 0xdcbaaaaa 0:000> dds 0x00286c3c //callstack 00286c3c  abcdaaaa 00286c40  00000001 00286c44  00000007 00286c48  00000001 00286c4c  00000014 00286c

14、50  00081000 00286c54  00000000 00286c58  00286c5c 00286c5c  7c94b244 ntdll!RtlAllocateHeapSlowly+0x44 00286c60  7c919c0c ntdll!RtlAllocateHeap+0xe64 00286c64  003afd2c vfbasics!AVrfpRtlAllocateHeap+0xb1 00286c68  010012f4 06overrun!DupString+0x24 [c:\awd\chapter6\overrun\overrun.cpp @ 41] 00

15、286c6c  010012ab 06overrun!wmain+0x2b [c:\awd\chapter6\overrun\overrun.cpp @ 28] 00286c70  010014b8 06overrun!__wmainCRTStartup+0x102 [d:\vistartm\base\crts\crtw32\dllstuff\crtexe.c @ 711] 00286c74  7c817077 kernel32!BaseProcessStart+0x23 00286c78  00000000 我们找到了出问题的callstack: 0:000> kb Chil

16、dEBP RetAddr  Args to Child               0006f9c8 10003b68 10062cb0 00000008 001e2b60 ntdll!DbgBreakPoint 0006fbd0 100078c9 1000c540 00000008 00081000 vrfcore!VerifierStopMessageEx+0x4d1 0006fbf4 7c96c06e 00000008 7c96c314 00081000 vrfcore!VfCoreRedirectedStopMessage+0x81 0006fc70 7c96d147 0008

17、1000 00000004 001e2b60 ntdll!RtlpDphReportCorruptedBlock+0x17c 0006fc94 7c96d34a 00081000 01000002 00000010 ntdll!RtlpDphNormalHeapFree+0x2e 0006fce4 7c9703eb 00080000 01000002 001e2b60 ntdll!RtlpDebugPageHeapFree+0x79 0006fd58 7c94bafc 00080000 01000002 001e2b60 ntdll!RtlDebugFreeHeap+0x2c 0006

18、fe40 7c91a1ba 00080000 01000002 001e2b60 ntdll!RtlFreeHeapSlowly+0x37 0006ff10 003afe9c 00080000 00000000 001e2b60 ntdll!RtlFreeHeap+0xf9 0006ff58 01001340 00080000 00000000 00000014 vfbasics!AVrfpRtlFreeHeap+0xf8 0006ff70 010012ab 00a64692 0006ffc0 010014b8 06overrun!DupString+0x70 [c:\awd\chapt

19、er6\overrun\overrun.cpp @ 47] 0006ff7c 010014b8 00000002 00a64648 00a66e98 06overrun!wmain+0x2b [c:\awd\chapter6\overrun\overrun.cpp @ 28] 0006ffc0 7c817077 00daf6ee 00daf784 7ffd8000 06overrun!__wmainCRTStartup+0x102 [d:\vistartm\base\crts\crtw32\dllstuff\crtexe.c @ 711] 0006fff0 00000000 010015f6 00000000 78746341 kernel32!BaseProcessStart+0x23 0:000> du 00a64692  00a64692  "SolidmangoSolidmangoSolidmango"   总结: 原来是我们的参数破坏了了堆内存,终于找到了根源,我们代码中定义的堆的大小为10,而我们使用的时候,由于堆块越界,破坏了堆块的完整性,从而导致了crash的发生..   注:本文的附图和代码灵感源自网络,具体出处不详,其他内容为原创..  

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服