Solaris 模块调试器指南

检查已释放的缓冲区: 0xdeadbeef

如果在 kmem_cache 的 flags 字段中设置了 KMF_DEADBEEF (0x2) 位,则分配器会尝试通过将特殊模式写入所有已释放缓冲区中,从而使内存损坏易于检测。 此模式即是 0xdeadbeef。 由于典型的内存区域同时包含已分配的内存和已释放的内存,因此每种块的各个节将是分散的;以下是来自 "kmem_alloc_24" 高速缓存的一个示例:

0x70a9add8:     deadbeef        deadbeef

0x70a9ade0:     deadbeef        deadbeef

0x70a9ade8:     deadbeef        deadbeef

0x70a9adf0:     feedface        feedface

0x70a9adf8:     70ae3260        8440c68e

0x70a9ae00:     5               4ef83

0x70a9ae08:     0               0

0x70a9ae10:     1               bbddcafe

0x70a9ae18:     feedface        139d

0x70a9ae20:     70ae3200        d1befaed

0x70a9ae28:     deadbeef        deadbeef

0x70a9ae30:     deadbeef        deadbeef

0x70a9ae38:     deadbeef        deadbeef

0x70a9ae40:     feedface        feedface

0x70a9ae48:     70ae31a0        8440c54e

0x70a9add8 开始的缓冲区是使用 0xdeadbeef 模式填充的,这就直接表明了缓冲区当前是空闲的。 另一个空闲缓冲区从 0x70a9ae28 开始;一个已分配的缓冲区介于它们之间,位于 0x70a9ae00


注意 –

您可能已经注意到此内存区域布局中有一些空洞,3 个 24 字节区域应该仅占用 72 字节的内存,而不是此处显示的 120 字节。 此差异将在下一节Redzone(禁区): 0xfeedface中进行说明。