2013年5月15日

windbg调试堆破坏

摘要: 堆破坏所谓的堆破坏,是说没控制好自己的指针,把不属于你分配的那块内存给写覆盖了。这块内存可能是你程序的数据,也可能是堆的管理结构。那么这个会导致怎样的后果呢?可能的情况我们来yy下把程序里的计算结果覆盖了,这也许会让你重复看了N次代码,校验了N次计算逻辑也搞不明白为何计算结果还是有问题堆管理结构被破坏了,new/delete,或者malloc/free操作失败等等等等~堆破坏较为理想的情况是被修改的数据会马上导致程序crash,最差的情况是你的堆数据莫名其妙在今天被改了,但明天才crash。这个时候在去分析crash,就如我们的警察叔叔现在接手一桩10年前的案子一般----无从下手。老外称之为 阅读全文

posted @ 2013-05-15 11:28 梦想Sky 阅读(13652) 评论(2) 推荐(2) 编辑

windbg调试HEAP

摘要: HEAP的概念堆栈堆栈,在操作系统内存中有两种存储空间,一个是堆,一个是栈。堆主要用于存储用户动态分配的变量,而栈呢,则是存储我们程序过程中的临时变量。当然栈的作用远不止用作存储变量,但这不是我们这篇文章的讨论内容。堆(HEAP)的分配,使用,回收都是通过微软的API来管理的,最常见的API是malloc和new。在往底层走一点呢,这两个函数都会调用HeapAlloc(RtlAllocateHeap)。同样的相关函数还有HeapFree用来释放堆,HeapCreate用来创建自己的私有堆。下面是这些函数的调用链:HeapCreate->RtlCreateHeap->ZwAlloca 阅读全文

posted @ 2013-05-15 10:49 梦想Sky 阅读(4929) 评论(0) 推荐(0) 编辑

导航