Saya sudah mencoba uncompress, gzip, dan semua solusi lain yang muncul sebagai hasil google dan ini belum bekerja untuk saya.
Untuk mendapatkan hanya pencarian gambar untuk tanda tangan 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
jadi gambar dimulai pada
24576+8 => 24584
. Kemudian cukup salin gambar dari titik dan dekompres itu -> 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
Dapatkan instruksi ini kata demi kata dari forum online: http://www.codeguru.com/forum/showthread.php?t=415186
Proses ini tidak bekerja untuk saya dan akhirnya memberikan kesalahan yang menyatakan file tidak ditemukan 0024576 dan semua nomor berikutnya.
Bagaimana cara saya melanjutkan mengekstraksi vmlinux dari vmlinuz?
Terima kasih.
Diedit: Ini adalah pertanyaan rekayasa terbalik. Saya tidak memiliki akses ke distro untuk menginstal RPM atau mengkompilasi ulang. Saya mulai dengan apa pun kecuali vmlinuz.
sumber
Jawaban:
Mungkin Anda salah mengerti apa yang dimaksud oleh penulis posting itu.
The
vmlinuz
file berisi hal-hal lain selain konten gzip, sehingga Anda perlu mencari tahu di mana konten gzip dimulai. Untuk melakukannya, gunakan:Apa yang dilakukan adalah untuk menunjukkan kepada Anda di mana dalam file itu Anda dapat menemukan header gzip. Outputnya terlihat seperti:
Ini berarti bahwa
0024576
setidaknya (untuk pembuat posting, milik Anda mungkin berada di tempat yang sama sekali berbeda) dalamvmlinuz
file, Anda akan menemukan nilai-nilai biner "24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45
". Anda sedang mencari1f 8b 08 00
, yang dapat ditemukan dari karakter 9 dan seterusnya, atau di0024576 + 8
(mulai menghitung dari 0)= 24584
.Sekarang Anda tahu di mana konten gzip dimulai (pada posisi
24584
) yang dapat Anda gunakandd
untuk mengekstrak konten gzip itu dan melepaskannya. Untuk melakukannya, gunakan:Perintah pertama akan mencari ke posisi itu dan menyalin semuanya ke stdout.
zcat
kemudian akan mengompres semua yang didapatnya dari stdin dan akan menampilkan string yang tidak terkompresi ke stdout. Kemudian>
akan mengarahkanzcat
keluaran ke file baru bernamavmlinux
.sumber
od
keluaran. Gunakan bgrep untuk mencari1f8b0800
. 2) Kernel dikompres menggunakan algoritma yang berbeda. Cobafd377a585a00
untuk xz atau425a6839
untuk bzip2 .Sumber kernel sekarang berisi skrip untuk ini
extract-vmlinux
,. Anda tidak perlu menggulung sendiri.Lihat jawaban SO ini .
sumber
apt-file search extract-vmlinux
memberikan beberapa paket header kernel Linux, danlocate extract-vmlinux
mengarah ke beberapa hits di mesin Ubuntu 18.04 lokal saya:/usr/src/linux-headers-4.15.0-33/scripts/extract-vmlinux
walaupunPATH
sepertinya tidak ada apa-apa di dalamnya.Sebenarnya, sebelum membuat
vmlinuz
file, sebagian besar simbol dilucuti. Jadi Anda tidak dapat membangun kembali truevmlinux
darivmlinuz
, file tidak akan berguna untuk debugging.sumber
Saya mengalami masalah sederhana - mencari versi yang benar dari vmlinux untuk crash. Alih-alih mencoba mendekompresi vmlinuz ke vmlinux.
Solusi yang lebih baik adalah: instal RPM:,
kernel-debuginfo
bahwa RPM berisi file vmlinux yang tepat.Perhatikan nama rpm, ada beberapa nama yang mirip (membingungkan). Harus:
kernel-debuginfo-$(version).rpm
sumber
Kernel modern tidak selalu (pada kenyataannya, tidak secara umum) terkompresi gzip. Mereka dapat menggunakan bzip2 atau LZMA. Pencarian web cepat tidak membantu saya menemukan string ajaib untuk metode kompresi tersebut - Anda mungkin lebih baik memeriksa beberapa gambar kernel untuk menemukan header invarian yang menyertakan kode dekompresi.
sumber
Baris dekompresi di atas bekerja untuk saya dan, tentu saja, kernelnya dilucuti. Karena itu tidak ada informasi yang baik di sana.
Jika Anda perlu membuat perubahan pada kernel lama Anda, seperti memasukkannya ke dalam debug, gunakan
uname -r
untuk mendapatkan revisi dari kernel Anda dan dapatkan sumbernya:Sumber akan berada di
/usr/src/linux...
cd
pohon sumber dan:Ini akan berusaha menemukan file yang berisi konfigurasi untuk kernel yang sedang berjalan - biasanya
dan menggunakannya untuk build ini sehingga menciptakan kembali kernel yang berjalan.
Bangun seperti yang Anda inginkan; memiliki akses ke kernel unstripped sesuai kebutuhan.
Kerang di atas mungkin tidak akan menemukan nomor ajaib gzip karena spasi. Ya mereka masih dikompresi dengan cara yang sama, meskipun saya menulis setahun setelah diskusi awal. Kirim output ke
less
dan cari1f 8b
atau bahkan1f
. Periksa sisa byte secara manual untuk menentukan kecocokan dan memverifikasi Anda memiliki instance pertama. Gunakan offset yang ditemukan mengingat itu desimal.sumber