堆(heap)系列
文章平均质量分 95
主要介绍堆(heap)的相关内容
磨刀砍柴Debug
当前本博客分享破解、算法、调试相关知识。
展开
-
堆(heap)系列_0x0A:3种方法一次性解决堆溢出问题
概述:本篇文章主要介绍堆问题中最常见的堆溢出问题的排查思路:常规思路 + 页堆思路 + 应用程序验证器思路前提:可以看到懂得DPH(点击查看)和会使用应用程序验证器(点击查看)和WinDbg原创 2022-07-06 13:35:39 · 2014 阅读 · 2 评论 -
堆(heap)系列_0x09:堆破坏示例(非法访问+未初始化+堆句柄不匹配)
主要介绍:1.非法访问堆内存;2.未初始化堆内存访问;3.堆句柄不匹配;这3个问题的排查思路原创 2022-07-06 13:18:26 · 1590 阅读 · 0 评论 -
堆(heap)系列_0x08:NT堆调试支持_立刻发现调试支持(DPH)
页堆:将堆的全部或部分调用到另一个堆管理器,会将申请的,且将的下一个页设置为,用这个只读页来检查缓冲区溢出;也可以将保护页(或者叫栅栏页)放在堆块前面;页堆在内存方面会造成巨大开销,因此1.运行notepad.exe,启动任务管理器记录这个notepad实例的PID和提交大小2.启动页堆管理员权限运行(使用方法,点击这里查看),GUI界面上给notepad.exe开启页堆,命令行也可以观察启动和关闭页堆前后的提交大小变化如下,开启后,提交大小明显变大,这是因为页堆提供了额外的内存分配扩展命令扩展:!he原创 2022-07-03 18:27:22 · 1358 阅读 · 0 评论 -
堆(heap)系列_0x07:NT堆调试支持_滞后发现调试支持
堆被破坏遇到最常见的原因就是溢出,下面主要介绍一下正常的堆结构和一种典型的溢出场景先要熟悉正常的堆块结构,下面是堆块结构和溢出的示意图用户只能访问到堆块的(HeapAlloc函数以返回地址的形式将用户数据区的起始地址返回)指的是访问非用户数据区的内存,有可能破坏了堆的控制数据(等)或者触发了堆检查机制(大多数检查机制都位于用户数据区的尾部)下面是一个在空闲堆块上分配一块内存的示意图:在堆上,分配一块内存简要步骤:示例场景:写入数据太多,导致覆盖当前堆块用户数据区后面结构和,再次申请内存由于破坏导致分配内存失原创 2022-06-28 19:35:12 · 997 阅读 · 1 评论 -
堆(heap)系列_0x06:NT全局标志和gflags.exe一页纸
NT全局标志是由一组位(bit)组成的32位数值,每一位都代表特定的功能;全局标志有2种影响范围:(影响所有进程,或者叫进程级)和(进程级的优先级更高)下面通过几个问题来介绍全局标志问题1:系统级别的全局标志怎么影响单个进程?没有指定进程级的全局标志时,进程级全局标志的影响流程:进程级的在进程创建时,通过进程加载器传播给每个用户态进程(被保存在进程环境块字段中)问题2:进程什么时候加载全局标志?进程的执行要经历进程加载器将磁盘上的文件加载到内存的过程(即PE文件的加载过程),此时会从注册表(如果有值话)读取原创 2022-06-27 18:41:06 · 922 阅读 · 0 评论 -
堆(heap)系列_0x05:一张图剖析堆块分配和FreeLists的联系
用一个示例来说明堆块的分配和释放,侧重点主要是对堆块分配后,返回的地址是哪里?以及堆块释放后,申请的内存变化,被谁回收了?下面对源码中处理堆块的2个函数和重点进行讲解执行完 ,在新创建的堆上想要获取一个大小是0x123的堆块查看堆段和堆块的相关信息,主要关注和是怎么得到的?2.HeapFree执行完 ,释放刚才申请的堆内存3.命令使用命令观察堆块信息,下面是释放内存后的堆信息如果感兴趣可以观察一下堆块释放前后的堆结构对比,会发现结构是一样的,唯一的区别:下面针对内存回收中使用的FreeLi原创 2022-06-16 18:42:39 · 667 阅读 · 0 评论 -
堆(heap)系列_0x04:堆的内部结构(_HEAP=_HEAP_SEGMENT+_HEAP_ENTRY)
_HEAP=_HEAP_SEGMENT+_HEAP_ENTRY,这3种数据结构使用WinDbg进行分析原创 2022-06-14 22:30:00 · 1063 阅读 · 0 评论 -
堆(heap)系列_0x03:堆块 + malloc/new底层 + LFH(WinDbg分析)
1.什么是堆块(chunk)?2.malloc、new的底层汇编是怎么实现的?3.LFH的全面介绍原创 2022-06-09 19:15:00 · 635 阅读 · 0 评论 -
堆(heap)系列_0x02:堆的前世今生(WinDbg+Visual Studio汇编)
1.默认堆是大小是多少?2.私有堆是什么?HeapCreate函数原理?堆列表是什么?3.堆销毁过程;4.堆创建和销毁的最小示例讲解原创 2022-06-08 06:53:27 · 923 阅读 · 1 评论 -
堆(heap)系列_0x01:堆-Introduction(框架+类型)
1.堆(heap)和栈(stack)的区别;2.操作系统层面堆的框架;3.堆的类型介绍(CRT堆+NT堆+段堆+默认堆+私有堆)原创 2022-06-05 01:29:15 · 379 阅读 · 0 评论