что означает «мертвая говядина»?

91

Что означает слово «мертвая говядина»? Я прочитал это из интервью. Это как-то связано с ipv6. Я подумал, что это может быть случайное шестнадцатеричное число, используемое для примеров, например, «Быстрая коричневая лиса перепрыгивает через ленивую собаку».

Я правильно понимаю? Или это имеет более существенное значение?

Си 张 熹
источник
59
Для меня это обеденный перерыв!
FrustratedWithFormsDesigner
5
"DEADBEEF" существует на протяжении десятилетий, возможно, даже до появления Интернета. (Полагаю, я использовал его в конце 70-х в IBM.) Это просто способ пометить, таким образом, который легко виден в шестнадцатеричных дампах, хранилище, которое освобождено или недоступно по другим причинам.
Hot Licks
1
@HotLicks: действительно, catb.org/jargon/html/D/DEADBEEF.html
Оливье Дюлак,

Ответы:

106

http://en.wikipedia.org/wiki/Hexspeak
http://www.urbandictionary.com/define.php?term=dead%3Abeef

«Мертвая говядина» - очень популярное предложение в программировании, потому что оно построено только из букв af, которые используются в шестнадцатеричной системе счисления. Двоеточие в начале и в середине предложения делает это предложение (теоретически) действительным IPv6-адресом.

Дастин Лайн
источник
45
чтобы убедиться, что ответы все еще существуют, даже если связанный сайт больше не существует. Википедия всегда изменяется и / заблокировано в некоторых странах по разным причинам ([ребенок] порно / с «неправильной» истины). Поэтому лучше сделать свой ответ отдельным и использовать только ссылки для подробных ответов / цитирования. Всего два цента.
josefx
46

Это выдуманное выражение, использующее только буквы AF, часто используемое, когда требуется распознаваемое шестнадцатеричное число. Некоторые системы используют его для различных целей, например, для отображения памяти, которая была освобождена и на которую больше не нужно ссылаться. В отладчике это значение может быть признаком того, что вы сделали ошибку. Из Википедии :

0xDEADBEEF («мертвая говядина») используется системами IBM RS / 6000, Mac OS на 32-битных процессорах PowerPC и Commodore Amiga в качестве волшебного значения отладки. В Solaris от Sun Microsystems он отмечает освобожденную память ядра. В OpenVMS, запущенной на процессорах Alpha, DEAD_BEEF можно увидеть, нажав CTRL-T.

Число 0xDEADBEEF равно менее узнаваемому десятичному числу 3735928559 (без знака) или -559038737 (со знаком).

Марк Байерс
источник
21
а как насчет 55378008 вверх ногами? (без знака)
mVChr
Или IPv4-адрес 222.173.190.239!
Алисса Гарольдсен
41

Значение 0xDEADBEEF дает три практических преимущества, в основном для старых систем. Старые хаки на ассемблере / C, такие как я, использовали бы его для заполнения нераспределенной памяти, чтобы устранить проблемы с памятью. Кроме того, это игра слов из сленгового термина «мертвое мясо». Программист будет мертвым мясом, если DEADBEEF окажется в его указателях. Поздравляю парня, который первым придумал использовать значение DEADBEEF. Это умно во многих отношениях.

Что касается практических соображений, во-первых, это более заметно в шестнадцатеричном дампе памяти, потому что он фактически записывает слова, а не случайные шестнадцатеричные значения.

Во-вторых, если значение попадает в указатель, это с большей вероятностью вызовет ошибку выхода памяти за пределы допустимого диапазона. Адрес DEADBEEF был вне диапазона адресов систем (мы сейчас говорим о системах прошлого века), независимо от порядка байтов системы.

В-третьих, это с большей вероятностью вызовет сбой в системах, которым требуются даже значения граничных указателей для доступа к 16/32/64-битным данным. Вероятность ошибки в значении выше, поскольку оба 16-битных значения (DEAD, BEEF) нечетные.

BSalita
источник
1
Это один из самых интересных SO-ответов, которые я читал за последнее время. Спасибо @BSalita!
Стив Янсен
19

Поскольку IPv6-адреса записываются в шестнадцатеричной системе счисления, вы можете использовать "Hexspeak" (цифры 0-9 и буквы af) в адресах.

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

Если вы ping6 www.facebook.com -nполучите что-то вроде «2a03: 2880: f01c: 601: face: b00c : 0: 1».

Вот некоторые примеры:

  • : aff :: (Affe - немецкий язык для обезьяны - замечен на влане для правления)
  • : 1bad: babe :: (один плохой малыш - замечен в smtp-honeypot)
  • : badc: ab1e :: (плохой кабель - рассматривается как подсеть для незащищенного vlan)
  • : da7a :: (Данные - для файловых серверов)
  • : d1a1 :: (Dial - замечен для подключения через VPN)
Мартин Зейтль
источник
3

Обычно люди используют его для обозначения фиктивных значений. Я думаю, что он в первую очередь использовался до идеи NULL-указателей.

Щенок
источник
5
DEADBEEF обычно использовался для маркировки освобожденной памяти, поэтому это было бы очевидно, когда у вас был висящий указатель IIRC.
Чак
2

Это магическое число используется в разных местах, потому что оно хорошо читается на английском языке, что выделяет его среди других. В Википедии есть неполный список .

дсолимано
источник
2

Он использовался в качестве шаблона для хранения в памяти в виде серии шестнадцатеричных байтов (0xde, 0xad, 0xbe, 0xef). Вы могли видеть, не была ли повреждена память из-за аппаратного сбоя, переполнения буфера и т. Д.

Ларри
источник
-1

0xDEADBEEF обычно заполняется в массивах памяти, так что любое исключение при неправильном указании или знании о переполнении буфера и т. Д.,

msathia
источник
Эта точка зрения далека от точки зрения, согласно которой каждый может ожидать, что сам по себе не имеет проблем и может быть прав, но без доказательств делает его невероятным.
шаломб