【问题标题】:Special Meaning for Pointer Value 0x7c7c7c7c指针值 0x7c7c7c7c 的特殊含义
【发布时间】:2008-12-11 14:34:39
【问题描述】:

在调试 Linux 应用程序时,我发现了一个带有可疑值 0x7c7c7c7c 的指针。该特定值是否表明了什么?

(我问是因为我从我的 MSVC 时代就知道,在调试版本中,0xcdcdcdcd 或 0xdddddddd 之类的值将存储到未初始化、已释放或以其他方式无效的堆块中。有些人使用 0xdeadbeef 或 0xcafebabe 等魔法值未初始化的内存。我猜 libc 或其他地方的某些东西使用 0x7c7c7c7c 作为魔法值,但我找不到它的文档。)

【问题讨论】:

    标签: c++ linux pointers


    【解决方案1】:

    我不认识那个神奇的数字,Wikipedia 也不认识。我猜您的程序(或您正在使用的库中)中的某些代码正在使用memset() 并点击您的指针。你是否已经为字符串“0x7c”不区分大小写地grep了你的代码库?

    【讨论】:

    • "0x7c" 是应用程序中使用的常量,但我看不出有什么方法可以将其中四个放在一起。
    • 如何作为常量使用?是每一个 memset()'d 还是 memcpy()'d 任何地方?你有缓冲区溢出吗?
    • 该应用从不将任何内容设置为 0x7c。它从串行端口读取传入字节,并且有一个带有“case 0x7c:”子句的 switch 语句。然而,这部分代码并没有被使用,而且我知道我们没有任何填充 0x7c 字符的缓冲区。
    • 嗯,有一个可能的答案......你会看到值 0x7C 的唯一一次是如果你忘记初始化那个指针。
    【解决方案2】:

    0x7C 是一个 ASCII 管道“|”特点。您可以按照Adam 的建议搜索该字符的写入以及 124 和 0x7C。

    【讨论】:

      【解决方案3】:

      0x7c7c = 01111100 01111100 二进制。这可能是格式化实用程序填充硬盘驱动器上未使用空间的“最难读取”位模式之一。

      【讨论】:

        【解决方案4】:

        也许设置了MALLOC_PERTURB_ 环境变量?如果设置,它会影响 malloc() 如何初始化分配的内存。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-14
          相关资源
          最近更新 更多