0xdead000000000000是什么意思?

时间:2015-01-06 15:03:43

标签: linux-kernel

这个值出现在poison.h(linux source \ include \ linux \ poison.h)中:

/*
 * Architectures might want to move the poison pointer offset
 * into some well-recognized area such as 0xdead000000000000,
 * that is also not mappable by user-space exploits:
 */

我只是对价值0xdead000000000000的特殊性感到好奇吗?

1 个答案:

答案 0 :(得分:7)

很确定这只是deadbeef的变种;即它只是一个容易识别的信号值(见http://en.wikipedia.org/wiki/Hexspeak为deadbeef)

指针中毒的想法是确保无法使用中毒列表指针而不会导致崩溃。假设您将结构与其所在的列表取消链接。然后,您希望使指针值无效,以确保它不会再次用于遍历列表。如果代码中某处有一个错误 - 一个悬空指针引用 - 你要确保任何试图通过这个现在未链接的节点跟踪列表的代码立即崩溃(而不是稍后在一些可能不相关的区域中崩溃)码)。

当然,您只需在其中放入一个空值或任何其他无效地址即可中毒指针。使用0xdead000000000000作为基值可以更容易区分显式中毒的值与初始化为零或被零覆盖的值。它可以与偏移量(LIST_POISON {1,2})一起使用,以创建多个不同的毒性值,这些值都指向虚拟地址空间的不可用区域,并且一目了然可以识别为无效。