Próbowałem już rozpakować, gzip i wszystkie inne rozwiązania, które pojawiają się jako wyniki google i te nie działały dla mnie.
Aby uzyskać tylko wyszukiwanie obrazu dla podpisu GZ -
1f 8b 08 00
.> od -A d -t x1 vmlinuz | grep '1f 8b 08 00' 0024576 24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45
więc obraz zaczyna się od
24576+8 => 24584
. Następnie po prostu skopiuj obraz z punktu i rozpakuj go -> dd if=vmlinuz bs=1 skip=24584 | zcat > vmlinux 1450414+0 records in 1450414+0 records out 1450414 bytes (1.5 MB) copied, 6.78127 s, 214 kB/s
Dostałem te instrukcje dosłownie z forum online: http://www.codeguru.com/forum/showthread.php?t=415186
Ten proces nie działa dla mnie i kończy się podawaniem błędów, które informują, że nie znaleziono pliku 0024576 i wszystkich kolejnych numerów.
Jak kontynuować wydobywanie vmlinux z vmlinuz?
Dziękuję Ci.
ZMIENIONO: To pytanie inżynierii odwrotnej. Nie mam dostępu do dystrybucji, aby zainstalować RPM lub ponownie skompilować. Zaczynam od nic oprócz vmlinuz.
źródło
Odpowiedzi:
Być może źle zrozumiałeś, co miał na myśli autor tego postu.
vmlinuz
Plik zawiera inne rzeczy oprócz zgzipowanego treści, więc trzeba dowiedzieć się, gdzie gzipped rozpoczyna treści. Aby to zrobić, użyj:To pokazuje, gdzie w tym pliku można znaleźć nagłówek gzip. Dane wyjściowe wyglądają następująco:
Oznacza to, że w
0024576
(przynajmniej dla autora postu twój może być zupełnie inny) wvmlinuz
pliku, znajdziesz wartości binarne „24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45
”. Szukasz1f 8b 08 00
, który znajdziesz od postaci 9 lub od0024576 + 8
(zacznij od zera)= 24584
.Teraz, gdy wiesz, gdzie zaczyna się zawartość spakowana gzipem (w pozycji
24584
), możesz użyć jejdd
do wyodrębnienia jej i rozpakowania. Aby to zrobić, użyj:Pierwsze polecenie będzie szukało tej pozycji i skopiuje wszystko na standardowe wyjście.
zcat
następnie rozpakuje wszystko, co otrzyma ze standardowego wejścia i wyśle nieskompresowany ciąg znaków na standardowe wyjście. Następnie>
przekierujezcat
dane wyjściowe do nowego pliku o nazwievmlinux
.źródło
od
wyjściu. Użyj bgrep, aby wyszukać1f8b0800
. 2) Jądro jest kompresowane przy użyciu innego algorytmu. Spróbujfd377a585a00
na XZ lub425a6839
dla bzip2 .Źródła jądra zawierają obecnie skrypt dla tego
extract-vmlinux
. Nie musisz rzucać własnym.Zobacz tę SO odpowiedź .
źródło
apt-file search extract-vmlinux
daje kilka pakietów nagłówków jądra Linuksa ilocate extract-vmlinux
prowadzi do kilku trafień na mojej lokalnej maszynie Ubuntu 18.04:/usr/src/linux-headers-4.15.0-33/scripts/extract-vmlinux
chociaż nic naPATH
to nie wygląda.W rzeczywistości przed wygenerowaniem
vmlinuz
pliku większość symboli jest usuwana. Więc nie można odbudować prawdziwyvmlinux
zevmlinuz
plik nie będzie tak użyteczne dla debugowania.źródło
Natknąłem się na prosty problem - szukam poprawnej wersji vmlinux na wypadek awarii. Zamiast próbować dekompresować vmlinuz do vmlinux.
Lepszym rozwiązaniem jest: zainstaluj RPM:,
kernel-debuginfo
że RPM zawiera odpowiedni plik vmlinux.Zwróć uwagę na nazwę rpm, istnieje wiele podobnych (mylących) nazw. Musi być:
kernel-debuginfo-$(version).rpm
źródło
Nowoczesne jądra nie zawsze są (w rzeczywistości nie zawsze) skompresowane przez gzip. Mogą używać bzip2 lub LZMA. Szybkie wyszukiwanie w Internecie nie pomogło mi znaleźć magicznych ciągów dla tych metod kompresji - być może lepiej będzie sprawdzić kilka obrazów jądra, aby znaleźć niezmienny nagłówek zawierający kod dekompresyjny.
źródło
Powyższe linie dekompresyjne działały dla mnie i, oczywiście, jądro zostało rozebrane. Dlatego nie ma tam dobrych informacji.
Jeśli chcesz wprowadzić zmiany w starym jądrze, na przykład w debugowaniu, użyj go,
uname -r
aby uzyskać wersję swojego jądra i uzyskać jego źródło:Źródło znajdzie się w
/usr/src/linux...
cd
drzewie źródeł i:Spróbuje to znaleźć plik zawierający konfigurację dla aktualnie działającego jądra - zwykle
i użyj go do tej kompilacji, odtwarzając w ten sposób działające jądro.
Zbuduj to tak, jak chcesz; w razie potrzeby mają dostęp do niezakończonego jądra.
Pociski powyżej prawdopodobnie nie znajdą magicznej liczby gzip z powodu odstępów. Tak, nadal są kompresowane w ten sam sposób, chociaż piszę rok po oryginalnej dyskusji. Wyślij dane wyjściowe
less
i wyszukaj1f 8b
lub nawet1f
. Sprawdź resztę bajtów ręcznie, aby ustalić dopasowanie i sprawdź, czy masz pierwszą instancję. Użyj znalezionego przesunięcia, pamiętając, że jest dziesiętny.źródło