【发布时间】:2010-09-09 17:23:58
【问题描述】:
所以,我想知道在 C 语言中是否有一个好的标记可供选择,除了常见的 0xDEADBEEF 或不太吸引人的(对于正确的代码)0x0BADA550。
你最喜欢什么? 是否有任何理由选择一个或另一个特定值?
【问题讨论】:
-
对我来说,它并没有关闭,正如在各种答案中所说的那样,选择这些值不仅是为了美观和可识别性,而且是为了某种功能(参见 int 3 的内容)。跨度>
所以,我想知道在 C 语言中是否有一个好的标记可供选择,除了常见的 0xDEADBEEF 或不太吸引人的(对于正确的代码)0x0BADA550。
你最喜欢什么? 是否有任何理由选择一个或另一个特定值?
【问题讨论】:
维基百科对此主题有whole page;它提供了许多示例和使用它们的著名软件。
无论如何,如果你在 x86 上工作,你应该考虑遵循@torak 的建议,充满int 3 的内存为我节省了好几次。如果你觉得有创意,你可以让它更容易辨认并使用CC90CC90,即交替使用int 3和nop。
【讨论】:
我能想到的唯一可能比审美价值更高的标记是0xCCCCCCCC。如果由于某种错误,它被执行0xCC 转换为INT 3 指令。
这适用于 IA-32 和 x86-64。我不确定是否有其他架构的等价物。
【讨论】:
嗯,我总是选择0x80000000、0x80000001 为每个新的区域类型递增以用有符号整数来处理意外值。对于无符号类型,这些值的使用会非常大,对于有符号类型主要是负数,并且对于所做的任何减法都会突然变为正数(从而同时测试其他错误)。这还有另一个巧妙的副作用,因为将设置各种 ALU 位,例如溢出,可以通过使用 -ftrapv 和其他编译器标志来检测。
【讨论】:
0xBABECAFE、0xBADADD00、0xBADBAD00、0xFADEFADE
0xCAFEBABE,据我所知,是 Java 的神奇数字。唯一让一个比另一个更好的是它不太可能出现在数据或未初始化的内存中。所以不要使用0x00000000或全部Fs。
【讨论】:
这取决于您要标记的内容。例如,您是否需要区分已分配但未初始化的内存和已释放的内存?如果是这样,您需要为两者使用不同的标记。
【讨论】:
每个人都有自己的喜好。如果团队中的每个人都使用不同的标记,则有助于确定错误的来源。如:
“DEADBEEF?哦,这一定来自约翰的代码。”
【讨论】: