Vmlinuz'u vmlinux'a nasıl açabilirim?


20

Zaten sıkıştırmayı kaldırmayı, gzip'i ve google sonuçları olarak ortaya çıkan diğer tüm çözümleri denedim ve bunlar benim için çalışmadı.

Sadece GZ imzasını aramak için resim 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

böylece görüntü başlar 24576+8 => 24584. Sonra görüntüyü noktadan kopyalayın ve açın -

> 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

Bu talimatları çevrimiçi olarak bir forumdan aldım: http://www.codeguru.com/forum/showthread.php?t=415186

Bu işlem benim için çalışmaz ve dosya bulunamadı 0024576 ve sonraki tüm numaraları bildiren hatalar verir.

Vmlinux'u vmlinuz'dan çıkarmaya nasıl devam edebilirim?

Teşekkür ederim.

DÜZENLENEN: Bu tersine mühendislik sorusudur. Herhangi bir RPM yüklemek veya yeniden derlemek için dağıtımına erişimim yok. Vmlinuz'dan başka bir şeyle başlamam.


2
Bunu neden yapmak istiyorsun?
Flimzy

Bu aslında onunla bir şeyler yapmak zorunda olan bir arkadaş için. Soru ilginç görünüyordu ve akademik ilgim için devam ettim. Buna bir alternatif çekirdek oluşturmaktır: - /

Akademik ilgi için, kolayca mümkün olup olmadığını bilmiyorum. Bir vmlinuz çekirdeğinin çalıştırılabilir bir önsözü olduğuna inanıyorum - aslında kendi kendine açılan bir arşiv. Bu yüzden düz gunzip kullanmak senin için işe yaramadı. Alıntılanan yöntem bu önsözü atlamaya çalışır. Neden işe yaramıyor, emin değilim. Belki benzer akademik ilgi alanlarına sahip birileri size faydalı bir cevap verebilir. :)
Flimzy

Yanıtlar:


30

Belki de bu yazının yazarının ne anlama geldiğini yanlış anladınız.

  1. vmlinuzNerede gzip'lenmiş içeriğin başladığı bulmak gerekir bu yüzden dosya, gzip içerik yanında başka şeyler içeriyor. Bunu yapmak için şunu kullanın:

    od -A d -t x1 vmlinuz | grep '1f 8b 08 00'
    

    Bunun yaptığı şey, bu dosyada gzip başlığını nerede bulabileceğinizi göstermektir. Çıktı şöyle görünür:

    0024576 24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45
    

    Bu 0024576, vmlinuzdosyada (en azından yazının yazarı için, sizinki tamamen farklı bir yerde olabilir) , ikili değerleri " 24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45" bulacağınız anlamına gelir . 1f 8b 08 00Karakter 9'dan itibaren ya da adresinde 0024576 + 8(0'dan saymaya başlayın) bulunabilecek bir şey arıyorsunuz = 24584.

  2. Artık sıkıştırılmış içeriğin nereden başladığını (pozisyonda 24584) ddbildiğinize göre bu sıkıştırılmış içeriği ayıklamak ve ungzip kullanmak için kullanabilirsiniz . Bunu yapmak için şunu kullanın:

    dd if=vmlinuz bs=1 skip=24584 | zcat > vmlinux
    

    İlk komut bu pozisyonu arayacak ve her şeyi stdout'a kopyalayacaktır. zcatsonra stdin'den aldığı her şeyi açar ve sıkıştırılmamış dizgiyi stdout'a çıkarır. Ardından, çıktıyı yeni bir dosyaya >yönlendirir .zcatvmlinux


Teşekkürler! Bu şimdi mantıklı. Ancak, '1f 8b 08 00' birkaç saniye yürütüldükten sonra çekirdeğim için herhangi bir şey döndürmedi. Görünüşe göre kod değişti. Yeni sihirli sayı kümesini nasıl alacağınıza dair herhangi bir öneriniz var mı?

@Lord Loh .: İki olasılık: 1) Sihirli sayılar, odçıktılarında sınır çizgilerini aşar . Aramak için bgrep kullanın 1f8b0800. 2) Çekirdek farklı bir algoritma kullanılarak sıkıştırılır. Deneyin fd377a585a00için xz veya 425a6839için bzip2 .
user1686

@ grawity - Cevabınız için teşekkür ederim. Bunu denedim. ne 1f8b0800, fd377a585a00 ne de 425a6839 herhangi bir sonuç döndürmedi. Bu yüzden bazı sonuçlar elde edene kadar sihirli dize bayt baytını kesmeye başladım ve yüzlerce maç oldular :-( Bu yüzden hala başarılı
olamıyorum.

Minimodding.com/… 'e göre LZMA "5d 00 00 80" dir . Hala benim için çalışmadı.
Sam Brightman

27

1
Bu Ubuntu 14.04'te mevcut mu? Git deposunda gördüm, hangi ubuntu paketinde bulabilirim? - Teşekkürler :-)
Lord Loh.

@LordLoh apt-file search extract-vmlinuxbirkaç linux çekirdek başlık paketi verir ve locate extract-vmlinuxyerel Ubuntu 18.04 makinemde birkaç vuruş yapar: /usr/src/linux-headers-4.15.0-33/scripts/extract-vmlinuxiçinde hiçbir şey PATHgörünmese de.
Ciro Santilli 事件 改造 中心 法轮功 六四 事件

ARM için "extract-vmlinux: vmlinux bulunamıyor" ile başarısız oluyor: unix.stackexchange.com/questions/352215/…
Ciro Santilli 事件 改造 中心 法轮功 六四 事件 19:18

7

Aslında, vmlinuzdosyayı oluşturmadan önce , çoğu sembol çıkarılır. Eğer gerçek bir yeniden edemez Yani vmlinuxgelen vmlinuz, dosya ayıklama için faydalı olmayacaktır.


2

Basit bir sorunla karşılaştım - kilitlenme için doğru vmlinux sürümünü arıyorum. Vmlinuz'u vmlinux'a sıkıştırmaya çalışmak yerine.

Daha iyi çözüm: RPM'yi yükleyin: kernel-debuginfoRPM uygun vmlinux dosyası içeriyor.

RPM adına dikkat edin, birden çok benzer (kafa karıştırıcı) isim vardır. Öyle olmalı:kernel-debuginfo-$(version).rpm


1

Modern çekirdekler her zaman (aslında değil, genel olarak değil) sıkıştırılmış değildir. Bzip2 veya LZMA kullanabilirler. Hızlı bir web araması, bu sıkıştırma yöntemleri için sihirli dizeleri bulmama yardımcı olmadı - dekompresyon kodunu içeren değişmez başlığı bulmak için birkaç çekirdek görüntüsünü kontrol etmekten daha iyi olabilirsiniz.


1

Yukarıdaki dekompresyon hatları benim için çalıştı ve tabii ki çekirdek soyuldu. Bu nedenle orada iyi bir bilgi yok.

Eski çekirdeğinizde hata ayıklamak gibi değişiklikler yapmanız gerekiyorsa, çekirdeğinizin uname -rrevizyonunu almak ve kaynağını almak için kullanın:

sudo apt-get source linux-image-\`uname -r\`

Kaynak /usr/src/linux... cd, kaynak ağacında olacak ve:

make oldconfig
make

Bu işlem, şu anda çalışan çekirdeğin yapılandırmasını içeren dosyayı bulmaya çalışır - genellikle

/boot/config-\`uname -r\` 

ve bu yapı için kullanır, böylece çalışan çekirdeği yeniden oluşturur.

İstediğiniz şekilde oluşturun; gerektiği gibi soyulmamış çekirdeğe erişebilir.

Yukarıdaki kabuklar muhtemelen boşluk nedeniyle gzip büyü numarasını bulamazlar. Evet, yine de aynı şekilde sıkıştırılıyorlar, ancak orijinal tartışmadan bir yıl sonra yazıyorum. Çıkışı gönderin lessve 1f 8bhatta arayın 1f. Bir eşleşme belirlemek ve ilk örneğe sahip olduğunuzu doğrulamak için diğer baytları elle kontrol edin. Ondalık olduğunu hatırlayarak bulunan ofseti kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.