0xDEADBEEF эквивалент для 64-битной разработки? - PullRequest
41 голосов
/ 11 августа 2009

Для разработки на C ++ для 32-битных систем (будь то Linux, Mac OS или Windows, PowerPC или x86) Я инициализировал указатели, которые в противном случае будет неопределенным (например, они не могут сразу получить правильное значение) вроде так:

int *pInt = reinterpret_cast<int *>(0xDEADBEEF);

(Чтобы сохранить набор текста и значение DRY , правая сторона обычно быть в константе, например BAD_PTR.)

Если pInt разыменовывается, прежде чем он получит правильное значение, то в большинстве систем происходит сбой (вместо сбой гораздо позже, когда некоторая память перезаписывается или собирается в очень длинный цикл).

Конечно, поведение зависит от основных аппаратное обеспечение (получение 4-байтового целого числа из нечетного адрес 0xDEADBEEF от пользовательского процесса может быть идеально действителен), но сбой был на 100% надежным для всех системы, которые я разработал до сих пор (Mac OS 68xxx , Mac OS PowerPC, Linux Redhat Pentium, Windows GUI Pentium, Windows консоль Pentium). Например, на PowerPC это незаконно (шина ошибка) для получения 4-байтового целого числа с нечетного адреса.

Какое значение имеет это для 64-битных систем?

Ответы [ 12 ]

0 голосов
/ 28 мая 2019

Поскольку система, над которой я работал, в основном работает на платформе x86_64, я использую значение:

0xDEADBEEFDEADBEEF

Резоны:

  • На платформе x86_64 в текущей реализации для адреса виртуальной памяти используются только младшие 48 битов, то есть любое значение> 2 ^ 48 должно работать: https://en.wikipedia.org/wiki/X86-64
  • Поскольку 0xDEADBEEF уже очень хорошо известен для этой цели в 32-битной версии, 0xDEADBEEFDEADBEEF в 64-битной версии просто более «обратно совместим»
0 голосов
/ 11 августа 2009

0x42 может работать как на 32, так и на 64 битах? (Он все равно должен вызывать сбой, поскольку он достаточно близок к указателю NULL, и, учитывая, что он довольно большой, есть вероятность, что вы не будете иметь его при обычной разыменовке поля структуры с указателем структуры NULL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...