2011-09-26 17 views
8

Mam niektóre pliki perla, które zostały "wybielone" (nie wiem, czy to z ACME :: Bleach, lub coś podobnego). Nie jest bardzo biegły w języku Perl, chciałbym zrozumieć, co one-liner, który uruchamia plik ma dekodować spacje, który następuje:Co robi ta linia perl z "wybielonego" pliku?

$_=<<'';y;\r\n;;d;$_=pack'b*',$_;$_=eval;[email protected]&&[email protected];$_ 

Reszta plik jest białe znaki, a plik jest plik wykonywalny (jest umieszczony w katalogu/bin).

[Rozwiązanie], dzięki @JB.

Część tego wydaje się najbardziej skomplikowana i zajęło mi trochę czasu, aby zauważyć, co się dzieje. Pack pobiera LSB tylko co 8 znaków i rozpakowuje je jako znak big-endian w binarnym. Tabulatory stają się więc '0, a spacje stają się' 1's.

'\t\t \t ' => '#' 
in binary: 
    00001001 00001001 00100000 00100000 00100000 00001001 00100000 0100000 
every LSB: 
    1 1 0 0 0 1 0 0 
convert from from big-endian format: 
    0b00100011 == 35 == ord('#') 

Odpowiedz

10
  • $_ = << ''; czyta resztę pliku do akumulatora.
  • y;\r\n;;d; paski powroty karetki i posuwy linii.
  • $_ = pack 'b*', $_; konwertuje znaki na bity w $_, najpierw LSB.
  • $_ = eval; wykonuje kod $_ jako kod Perla.
  • [email protected] && die [email protected]; $_ obsługuje wyjątki i wdzięcznie nadaje kod powrotu.
+0

OK, myślę, że to funkcja 'packa' mnie potknęła. Czy możesz wyjaśnić, jak coś w rodzaju '\ t \ t \ t 'tłumaczy na'' # ''? – JimB

+0

Niestety, wygląda na to, że surowe postacie mają jeszcze spasowane przestrzenie, które powinny być "tab tab sp w sp sp sp sp sp". – JimB

+0

'tab' jest' chr (9) ', nieparzyste; 'sp' to' chr (32) ', nawet. Więc twój ciąg tłumaczy się na sekwencję bitów 1, 1, 0, 0, 0, 1, 0, 0, 0, która (najpierw LSB) to 0x23, kod ASCII dla '' # ''. (masz jeszcze trochę) –

3

Możesz użyć unbleach.pl, aby usunąć blaknięcie, jeśli tak naprawdę chcesz to zrobić.

+2

Chociaż może to teoretycznie odpowiedzieć na pytanie, [byłoby lepiej] (http://meta.stackexchange.com/q/8259), aby uwzględnić istotne części odpowiedzi tutaj i dostarczyć link do odniesienia. Chroni także przed zgnilizną łącza. –

+0

@ 0A0D, Dobra, naprawione. Pomyślałem, że w tej sprawie było rzeczą oczywistą. – ikegami

+0

Zostajesz poddany pod głosowanie bc Nigdy nie pytałem, jak usunąć plik (plus unbleach.pl nie będzie działał bezpośrednio na tych plikach bez kilku poprawek). Stwierdziłem, że chcę się dowiedzieć, jak działa linia perla, która uruchamia każdy plik. – JimB