• 堆调试技巧


    • 微软为了帮助程序员快速找到内存错误导致的BUG,在堆管理器中提供了一些调试选项用于辅助堆调试,下面是一些常见的调试选项,可以通过Windbg 提供的gflags.exe 来设置。
     
    1. htc - 堆尾检查,在堆块末尾附加额外的标记信息(通常为8字节),用于检查是否发生溢出。
    2. hfc-堆释放检查,在释放堆块时对堆进行各种检查,防止多次释放同一个堆块。
    3. hpc-堆差数检查,对传递给堆管理的参数进行更多的检查。
    4. ust-用户态栈回溯,即将每次调用堆函数的函数调用信息记录到一个数据库中。
    5. htg-堆标志,为堆块增加附加标志,以记录堆块的使用情况和其他信息。
    6. hvc-调用时验证,即每次调用堆函数是都对整个堆进行验证和检查。
    7. hpa-启用页堆,在堆块后增加专门用于检查溢出的栅栏页,若发生堆溢出触及栅栏页便会立刻触发异常。
     
     
    • 比如要针对app.exe程序添加堆尾检查功能和页堆,去除堆标志,可以执行以下命令:
    gflags.exe -i app.exe +ptc +hpa -htg
     
    在堆漏洞调试中,较为常用的是htc.hpc.hfc和hpa。
     
    • 不过我自己在调试中,使用windbg设置条件时,!gflag命令并没有执行,也没有去找什么原因,我直接用gflags.exe来实现。

                                                      参考《漏洞战争》

     
  • 相关阅读:
    项目代码风格要求
    命名规范
    五招四十二式
    PMBok项目管理
    敏捷软件开发要点
    设计一种前端数据延迟加载的jQuery插件(2)
    为什么Java byte 类型的取值范围是-128~127 (转)
    Xcode编译时出现cannot run using the selected device提示
    mac下的常用操作
    iOS用AVAudioPlayer播放m4a音频
  • 原文地址:https://www.cnblogs.com/banchen/p/8520869.html
Copyright © 2020-2023  润新知