Як розпакувати vmlinuz до vmlinux?


20

Я вже спробував розпакувати, gzip та всі інші рішення, які з'являються як результати Google, і це не працює для мене.

Щоб отримати просто пошук зображення для підпису 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

тому зображення починається о 24576+8 => 24584. Потім просто скопіюйте зображення з точки і розпакуйте його -

> 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

Ці інструкції отримано дослівно з форуму в Інтернеті: http://www.codeguru.com/forum/showthread.php?t=415186

Цей процес для мене не працює, і в кінцевому підсумку видаються помилки, які у стані не знайшли файл 0024576 та всі наступні номери.

Як перейти до вилучення vmlinux з vmlinuz?

Дякую.

ВЕДЕНО: Це зворотне інженерне питання. У мене немає доступу до дистрибутива, щоб встановити будь-яку RPM або перекомпілювати. Я починаю з нічого, крім vmlinuz.


2
Чому ти хочеш це робити?
Flimzy

Це насправді для друга, який мав щось із цим зробити. Питання здавалося цікавим, і я переслідував це заради мого академічного інтересу. Альтернативою цьому є побудова ядра: - /

Що ж, для академічного інтересу, я не знаю, чи легко це можливо. Я вважаю, що ядро ​​vmlinuz має виконувану преамбулу - це, по суті, саморозпаковується архів. Ось чому використання прямого пістолета не допомогло вам. Цитований метод намагається пропустити повз цю преамбулу. Чому це не працює, я точно не знаю. Можливо, хтось із подібними академічними інтересами може дати вам корисну відповідь. :)
Flimzy

Відповіді:


30

Можливо, ви неправильно зрозуміли, що означав автор цієї публікації.

  1. vmlinuzФайл містить інші речі , крім стиснута GZIP змісту, так що вам потрібно , щоб дізнатися, де починається з gzip'нутим контентом. Для цього використовуйте:

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

    Це означає, щоб показати вам, де в цьому файлі ви можете знайти заголовок gzip. Вихід виглядає так:

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

    Це означає, що у 0024576(принаймні, для автора публікації, ваш vmlinuzфайл може бути десь зовсім іншим) у файлі ви знайдете двійкові значення " 24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45". Ви шукаєте 1f 8b 08 00, які можна знайти від символу 9 або далі 0024576 + 8(почніть рахувати з 0) = 24584.

  2. Тепер, коли ви знаєте, з чого починається gzipped вміст (в положенні 24584), ви можете використовувати ddдля вилучення цього gzipped вмісту та скасувати його. Для цього використовуйте:

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

    Перша команда буде прагнути до цього положення і скопіювати все в stdout. zcatтоді розпакує все, що отримується від stdin, і видасть нестиснену рядок до stdout. Тоді висновок >буде переспрямовано zcatна новий файл з назвою vmlinux.


Спасибі! Це має сенс зараз. Однак '1f 8b 08 00' не повернув нічого для мого ядра після декількох секунд виконання. Мабуть, код змінився. Будь-яка пропозиція, як отримати новий набір магічних чисел?

@ Лорд Ло.: Дві можливості: 1) Магічні числа перетинають межі лінії у odвиході. Використовуйте bgrep для пошуку 1f8b0800. 2) Ядро стискається за допомогою іншого алгоритму. Спробуйте fd377a585a00для xz або 425a6839для bzip2 .
користувач1686

@ grawity - Дякую за відповідь. Я спробував це. ні 1f8b0800, fd377a585a00, ні 425a6839 не дали результатів. Тож я почав рубати чарівний рядок на байт, поки не отримав певних результатів, і це були сотні матчів :-( Так що я все ще без успіху.
Лорд Ло.

Згідно з minimodding.com/…, LZMA - це "5d 00 00 80" . Ще не працювали для мене.
Сем Брайтман

27

1
Це доступно в Ubuntu 14.04? Я бачив це в git repo, в якому пакунку ubuntu я можу його знайти? - Дякую :-)
Лорд Лох.

@LordLoh apt-file search extract-vmlinuxдає кілька пакетів заголовків ядра Linux та locate extract-vmlinuxпризводить до кількох звернень на моїй локальній машині Ubuntu 18.04: /usr/src/linux-headers-4.15.0-33/scripts/extract-vmlinuxхоча нічого в PATHцьому не здається.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Для ARM це не вдається з "extract-vmlinux: Не вдається знайти vmlinux": unix.stackexchange.com/questions/352215/…
Ciro Santilli 新疆 改造 中心 法轮功 六四

7

Насправді перед створенням vmlinuzфайлу більшість символів знімаються. Таким чином, ви не можете відновити істину vmlinuxз vmlinuz, файл не буде настільки корисний для налагодження.


2

Я зіткнувся з простою проблемою - шукав правильну версію vmlinux для краху. Замість того, щоб намагатися розпакувати vmlinuz на vmlinux.

Кращим рішенням є: встановити RPM:, kernel-debuginfoщо RPM містить належний файл vmlinux.

Зверніть увагу на ім'я rpm, є кілька подібних (заплутаних) імен. Повинен бути:kernel-debuginfo-$(version).rpm


1

Сучасні ядра не завжди (насправді, не взагалі) стискаються gzip. Вони можуть використовувати bzip2 або LZMA. Швидкий пошук в Інтернеті не допоміг мені знайти магічні рядки для цих методів стиснення - можливо, вам буде краще перевірити кілька зображень ядра, щоб знайти інваріантний заголовок, що включає код декомпресії.


1

Лінії декомпресії вище працювали для мене і, звичайно, ядро ​​було позбавлене. Тому хорошої інформації немає.

Якщо вам потрібно внести зміни до свого старого ядра, наприклад, поставити його в налагодження, скористайтеся, uname -rщоб отримати версію ядра та отримати його джерело:

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

Джерело буде в /usr/src/linux... cdдереві-джерелі та:

make oldconfig
make

Це спробує знайти файл, що містить конфігурацію для поточного ядра, що працює, як правило

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

і використовувати його для цієї збірки, таким чином відтворюючи запущене ядро.

Побудуйте так, як вам хочеться; мати доступ до нерозкритого ядра за потребою.

Оболонки вгорі, ймовірно, не знайдуть магічне число gzip через відстань. Так, вони все ще стиснуті так само, хоча я пишу через рік після первинної дискусії. Надішліть вихід lessі шукайте 1f 8bабо навіть парні 1f. Перевірте решту байтів вручну, щоб визначити відповідність і переконатися, що у вас є перша інстанція. Використовуйте знайдене зміщення, пам'ятаючи, що це десятковий.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.