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?


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,

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.


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).


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.


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)


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.


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 .


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.


-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.,


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.