- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
WINDBG 的堆调试
HEAP 的概念
堆栈堆栈,在操作系统内存中有两种存储空间,一个是堆,一个是栈。堆主要用于存储用户动态分配的变量,而栈呢,则是存储我们程序过程中的临时变量。当然栈的作用远不止用作存储变量,但这不是我们这篇文章的讨论内容。
堆(HEAP)的分配,使用,回收都是通过微软的 API 来管理的,最常见的 API 是 malloc 和new。在往底层走一点呢,这两个函数都会调用 HeapAlloc(RtlAllocateHeap)。同样的相关函数还有 HeapFree 用来释放堆,HeapCreate 用来创建自己的私有堆。下面是这些函数的调用链:
HeapCreate-RtlCreateHeap-ZwAllocateVirtualMemory (这里会直接申请一大片内存,至于申请多大内存,由进程 PEB 结构中的字段觉得,HeapSegmentReserve 字段指出要申请多大的虚拟内存,HeapSegmentCommit 指明要提交多大内存,对虚拟内存的申请和提交概念不清楚的童鞋,请参见 windows 核心编程相关内容~)
HeapAlloc-RtlAllocateHea(p 至于这里申请的内存,由于HeapCreate 已经申请了一大片内存,
堆管理器这片内存中划分一块出来以满足申请的需要。这一步申请操作是堆管理器自己维护的,仅当申请内存不够的时候才会再次调用ZwAllocateVirtualMemory )
HeapFree-RtlFreeHeap (对于释放的内存,堆管理器只是简单的把这块内存标志位已释放让后加入到空闲列表中,仅当空闲的内存达到一定阀值的时候会调用ZwFreeVirtualMeMory )
HeapDestroy-RtlDestroyHeap-ZwFreeVirtualMeMory (销毁我们申请的堆) 如何找到我们的 HEAP 信息?
WINDBG 观察堆
源码:
#include windows.h int main()
{
HANDLE heap_handle = HeapCreate( NULL , 0x1000 , 0x2000 ) ; char *buffer = (char*)HeapAlloc(heap_handle , NULL , 128) ;
char *buffer1 = (char*)HeapAlloc(heap_handle , NULL , 121) ;
HeapFree(heap_handle, 0 , buffer ) ; HeapFree(heap_handle, 0 , buffer1 ) ;
HeapDestroy( heap_handle) ; return 0 ;
}
该源码生成编译生成 heap.exe,然后用 windbg 调试这个程序,在 main 函数下断,紧接着执行第五行语句,执行结果如下
0:000 p
eax=002e1ca0 ebxecx=6d29b6f0 edxesiedieip esp=0022fe8c ebp=0022feac iopl=0 nv up ei pl nz na po nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 eflheap!main+0x12:ff150c200301 call dword ptr [heap!_imp HeapCreate (0103200c)] ds:0023:0103200c={kernel32!HeapCreateStub (769a29d7)}
0:000 p
eax=002c0000 ebxecxedxesiedieip esp=0022fe98 ebp=0022feac iopl=0 nv up ei pl nz na pe nc cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 eflheap!main+0x18:8945fc mov dword ptr [ebp-4],eax ss:0023:0022fea8=6d222201 0:000 !heap
Index Address Name Debugging options enabled 1:2:3:4: 002e0000
5: 002c0
您可能关注的文档
- Unit 1 Never Give In, Never, Never, Never课文翻译综合教程四.docx
- unit 1 sports分析和总结最新分析和总结.docx
- Unit 1-2 词汇题练习分析和总结.docx
- unit 2 教案2分析和总结.docx
- Unit 3 Families Celebrate Together分析和总结最新分析和总结.docx
- Unit 3 Teenagers should be allowed to choose their own clothes.测试分析和总结.docx
- unit 3分析和总结最新分析和总结.docx
- unit 5 Writing Three Thank-You Letters分析和总结最新分析和总结.docx
- Unit 6 It is raining!教学设计分析和总结.docx
- Unit 6 Happy Birthday !Part A Let`s learn说课稿分析和总结.docx
最近下载
- GB∕T 24353-2022 《风险管理 指南》解读和应用指导材料(雷泽佳编写2024B0).pdf VIP
- 2025年版检验检测机构资质认定评审准则考试试题及答案.pdf VIP
- 前交通动脉瘤破裂伴蛛网膜下腔出血个案护理.pptx VIP
- 临床颅内动脉瘤破裂伴蛛网膜下腔出血的个案护理.pptx VIP
- 检验检测机构资质认定评审准则试题及答案.pdf VIP
- 语文教学中的心理健康教育心得体会.docx VIP
- 《检验检测机构资质认定评审准则》试题及答案.pdf VIP
- 蛛网膜下腔出血的个案护理.pptx VIP
- 蛛网膜下腔出血的个案护理.ppt VIP
- Philips 飞利浦 真无线耳机 TAT3256WT 93产品支持与说明书 操作手册.pdf
文档评论(0)