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


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) нечетные.


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 обычно заполняется в массивах памяти, так что любое исключение при неправильном указании или знании о переполнении буфера и т. Д.,


Эта точка зрения далека от точки зрения, согласно которой каждый может ожидать, что сам по себе не имеет проблем и может быть прав, но без доказательств делает его невероятным.
— шаломб
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.