• 一些debug常用的"魔法"数值


    CCCCCCCC
    微软C++ debugging运行时用该值标记未初始化过内存

    CDCDCDCD
    微软C++ debugging运行时用该值标记未初始化过内存

    FEEEFEEE
    微软的HeapFree函数用该值来标记被释放了的堆内存

    ABABABAB
    为堆分配的内存后, 微软的HeapAlloc函数用该值标记"no man's land"哨兵位.
    所谓哨兵位(Guard Byte)就是所分配的内存的起始和终止地址上的内存的值.

    BAADF00D
    微软的LocalAlloc函数用该值标记为初始化过的已分配的堆内存

    BEEFCACE
    微软的.NET使用该值作为resource file的magic

    DDDDDDDD
    微软C++ debugging 堆用该值标记被释放了的堆内存

    FDFDFDFD
    为堆分配内存前后, 微软C++ debugging 堆用该值标记"no man's land"哨兵位.

    上述这些值应用在微软的技术中并不是偶然的, 在Writing Solid Code中, Steve Maguire对此进行了讨论. 他给出了这些值的一些标准.

    • 这些值应该是没啥用的, 操作这些数值的算法应该是做些特殊的事情的. 比如说, 0这样的数值就不符合这一条.
    • 这些值应该可以很容易地在debugger中做为非法数值被识别出来.
    • 在没有byte alignment的机器上, 这些值应该是奇数, 所以, 间接引用这些值作为地址会引发异常.
    • 如果这些值作为代码被执行的话, 会引发一场或者引发debugger断点进入.

    .

  • 相关阅读:
    开源包管理系统和环境管理系统 Conda
    浅谈 Python 的模块导入
    用 pytest 测试 python 代码
    关于特征筛选中的IV值
    二 k-means聚类算法的手动实现
    二 统计量及其抽样分布
    PAT B1056组合数的和
    PAT B1061判断题
    'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
    Hadoop搭建高可用的HA集群
  • 原文地址:https://www.cnblogs.com/freedesert/p/2832633.html
Copyright © 2020-2023  润新知