co oznacza „martwa wołowina”?

91

Co oznacza słowo „martwa wołowina”? Przeczytałem to z pytania do wywiadu. Ma to coś wspólnego z ipv6. Pomyślałem, że może to być losowa liczba szesnastkowa używana w przykładach, na przykład „Szybki brązowy lis przeskakuje nad leniwym psem”.

Czy moje rozumienie jest prawidłowe? Czy ma bardziej znaczące znaczenie?

Xi 张 熹
źródło
59
Dla mnie to pora obiadowa!
FrustratedWithFormsDesigner
5
„DEADBEEF” sięga dziesięcioleci, być może nawet sprzed Internetu. (Wydaje mi się, że używałem go pod koniec lat 70. w IBM.) Jest to tylko sposób na zaznaczenie, w sposób łatwo widoczny na zrzutach szesnastkowych, pamięci, która jest zwolniona lub w inny sposób nie można uzyskać do niej dostępu.
Hot Licks,
1
@HotLicks: rzeczywiście, catb.org/jargon/html/D/DEADBEEF.html
Olivier Dulac

Odpowiedzi:

106

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

„Martwa wołowina” jest bardzo popularnym zdaniem w programowaniu, ponieważ jest zbudowane wyłącznie z liter af, które są używane w notacji szesnastkowej. Dwukropki na początku i w środku zdania sprawiają, że jest to (teoretycznie) prawidłowy adres IPv6.

Dustin Laine
źródło
45
aby upewnić się, że odpowiedzi są nadal dostępne, nawet jeśli witryna, do której prowadzi łącze, już nie istnieje. Wikipedia ciągle się zmienia i jest / była blokowana w niektórych krajach z różnych powodów (pornografia dziecięca / „zła” prawda). Dlatego najlepiej jest udzielić odpowiedzi samodzielnej i używać tylko linków do szczegółowych odpowiedzi / cytatów. Tylko moje dwa centy.
josefx
46

Jest to zmyślone wyrażenie wykorzystujące tylko litery AF, często używane, gdy wymagana jest rozpoznawalna liczba szesnastkowa. Niektóre systemy używają go do różnych celów, takich jak wyświetlanie pamięci, która została zwolniona i nie należy do niej odwoływać się ponownie. W debugerze ta wartość może oznaczać, że popełniłeś błąd. Z Wikipedii :

0xDEADBEEF ("dead beef") jest używane przez systemy IBM RS / 6000, Mac OS na 32-bitowych procesorach PowerPC i Commodore Amiga jako magiczna wartość debugowania. W systemie Solaris firmy Sun Microsystems oznacza zwolnioną pamięć jądra. W OpenVMS działającym na procesorach Alpha DEAD_BEEF można zobaczyć, naciskając CTRL-T.

Liczba 0xDEADBEEF jest równa mniej rozpoznawalnej liczbie dziesiętnej 3735928559 (bez znaku) lub -559038737 (ze znakiem).

Mark Byers
źródło
21
ale co z 55378008 do góry nogami? (unsigned)
mVChr
Lub adres IPv4 222.173.190.239!
Alyssa Haroldsen
41

Wartość 0xDEADBEEF ma trzy praktyczne zalety, głównie w przypadku starszych systemów. Stare metody asemblera / C, takie jak ja, używałyby go do wypełnienia nieprzydzielonej pamięci, aby rozwiązać problemy z pamięcią. Jest to również gra słów slangowych „martwe mięso”. Programista jest martwy, jeśli DEADBEEF znajdzie się w jego wskazówkach. Gratuluję facetowi, który jako pierwszy pomyślał o użyciu wartości DEADBEEF. Jest sprytny na wiele sposobów.

Z powodów praktycznych, po pierwsze, jest to bardziej zauważalne w szesnastkowym zrzucie pamięci, ponieważ w rzeczywistości zapisuje słowa, a nie losowe wartości szesnastkowe.

Po drugie, jeśli wartość znajdzie się we wskaźniku, bardziej prawdopodobne jest wywołanie błędu poza zakresem pamięci. Adres DEADBEEF był poza zakresem adresów systemów (mówimy teraz o systemach z ubiegłego wieku), niezależnie od endian systemu.

Po trzecie, bardziej prawdopodobne jest wywołanie błędu w systemach, które wymagają nawet wartości wskaźników granicznych w celu uzyskania dostępu do danych 16/32/64-bitowych. Wartość jest bardziej prawdopodobna, ponieważ obie wartości 16-bitowe (DEAD, BEEF) są nieparzyste.

BSalita
źródło
1
To jedna z najciekawszych odpowiedzi SO, jakie czytałem od jakiegoś czasu. Dziękuję @BSalita!
Steve Jansen
19

Ponieważ adresy IPv6 są zapisywane w notacji szesnastkowej, w adresach można używać „Hexspeak” (cyfry 0-9 i litery af).

Istnieje wiele słów, których możesz użyć jako prawidłowych adresów, aby lepiej je ujednolicić.

Jeśli ping6 www.facebook.com -notrzymasz coś w rodzaju „2a03: 2880: f01c: 601: face: b00c : 0: 1”.

Oto kilka przykładów:

  • : affe :: (Affe - po niemiecku Monkey - widoczne w sieci VLAN dla zarządu)
  • : 1bad: babe :: (jeden zły babe - widziany w smtp-honeypot)
  • : badc: ab1e :: (zły kabel - postrzegany jako podsieć niezabezpieczonej sieci VLAN)
  • : da7a :: (Dane - widoczne dla serwerów plików)
  • : d1a1 :: (Dial - widoczne dla VPN Dial-In)
Martin Seitl
źródło
3

Ludzie zwykle używają go do wskazania wartości fikcyjnych. Myślę, że był używany przede wszystkim przed pomysłem wskaźników NULL.

Szczeniak
źródło
5
DEADBEEF był powszechnie używany do oznaczania zwolnionej pamięci, więc byłoby to oczywiste, gdybyś miał wiszący wskaźnik IIRC.
Chuck
2

To magiczna liczba używana w różnych miejscach, ponieważ zdarza się, że jest czytelna również w języku angielskim, dzięki czemu się wyróżnia. W Wikipedii jest częściowa lista .

dsolimano
źródło
2

Był używany jako wzorzec do przechowywania w pamięci jako seria bajtów szesnastkowych (0xde, 0xad, 0xbe, 0xef). Można było sprawdzić, czy pamięć nie została uszkodzona z powodu awarii sprzętu, przepełnienia bufora itp.

Larry
źródło
-1

0xDEADBEEF jest zwykle wypełniane w tablicach pamięci, aby każdy wyjątek, gdy został nieprawidłowo wskazany lub aby wiedzieć, że bufor działa, itp.,

msathia
źródło
Ten pogląd jest daleki od poglądu, że każdy mógłby się spodziewać, że sam w sobie nie ma problemu i może mieć rację, ale bez dowodów czyni go niewiarygodnym.
shalomb