vmlinuzをvmlinuxに解凍するにはどうすればよいですか?


20

私はすでに、圧縮解除、gzip、およびグーグルの結果として出てくる他のすべてのソリューションを試しましたが、これらは私にとってはうまくいきませんでした。

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およびそれ以降のすべての番号を示すエラーが発生します。

vmlinuzからvmlinuxを抽出するにはどうすればよいですか?

ありがとうございました。

編集:これはリバースエンジニアリングの質問です。RPMをインストールしたり再コンパイルしたりするためのディストリビューションにはアクセスできません。私はvmlinuzから始めます。


2
なぜこれをしたいのですか?
Flimzy

これは、実際に何かをしなければならなかった友人のためのものです。質問は面白そうに思えたので、学問的な興味のために追求しました。これに代わる方法は、カーネルをビルドすることです:-/

まあ、学術的な興味のために、それが簡単に可能かどうかはわかりません。vmlinuzカーネルには実行可能なプリアンブルがあると思います。これは本質的には自己解凍アーカイブです。そのため、ストレートガンジップを使用しても機能しませんでした。quotedメソッドは、そのプリアンブルをスキップします。なぜ機能しないのか、確かにわかりません。同様の学問的関心を持つ他の誰かがあなたに役に立つ答えを与えるかもしれません。:)
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
    

    これは0024576vmlinuzファイルの(少なくとも投稿の作成者にとっては、どこかで完全に異なる可能性がある)バイナリ値 " 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. gzip圧縮されたコンテンツの開始位置(24584)がわかったので、gzip圧縮されたコンテンツddを抽出して解凍することができます。それを行うには、次を使用します。

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

    最初のコマンドはその位置にシークし、すべてを標準出力にコピーします。zcat次に、stdinから取得したすべてを解凍し、非圧縮文字列をstdoutに出力します。次に、の出力をという名前の新しいファイルに>リダイレクトしzcatますvmlinux


ありがとう!それは今理にかなっています。ただし、「1f 8b 08 00」は、数秒の実行後にカーネルに対して何も返しませんでした。どうやらコードが変更されたようです。新しいマジックナンバーのセットを取得する方法に関する提案はありますか?

@Lord Loh .: 2つの可能性:1)odの出力では、マジックナンバーが行の境界を越えます。bgrepを使用してを検索し1f8b0800ます。2)カーネルは、異なるアルゴリズムを使用して圧縮されます。お試しfd377a585a00XZ425a6839のためにBZIP2
-grawity

@ grawity-お返事ありがとうございます。やってみた 1f8b0800、fd377a585a00、425a6839のいずれも結果を返しませんでした。私はいくつかの結果を得たまでバイトで魔法の文字列のバイトを切り倒し開始し、そこで彼らが試合の何百ものでした:-(ので、私は成功せず、まだしています。
主楼。

minimodding.com/…によると、LZMAは「5d 00 00 80」です。それでも私にはうまくいきませんでした。
サムブライトマン

27

カーネルソースには、このためのスクリプトが含まれていますextract-vmlinux。独自にロールする必要はありません。

このSO回答を参照してください。


1
これはUbuntu 14.04で利用できますか?gitレポジトリで見ましたが、どの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にとってはで失敗し、 "抽出物のvmlinux:のvmlinux見つけることができません":unix.stackexchange.com/questions/352215/...
チロSantilliは新疆改造中心法轮功六四事件

7

実際には、vmlinuzファイルを生成する前に、ほとんどのシンボルが削除されます。したがって、vmlinuxからtrue を再構築することはできませんvmlinuz。ファイルはデバッグに役立ちません。


2

私は単純な問題に遭遇しました-クラッシュするための正しいバージョンのvmlinuxを探しています。vmlinuzをvmlinuxに解凍する代わりに。

より良い解決策は、RPMをインストールするkernel-debuginfoことです。RPMには適切なvmlinuxファイルが含まれています。

rpm名に注意してください。複数の類似した(紛らわしい)名前があります。お奨め:kernel-debuginfo-$(version).rpm


1

最新のカーネルは、常に(実際には、一般的にではなく)gzip圧縮されているわけではありません。bzip2またはLZMAを使用できます。簡単なWeb検索では、これらの圧縮方法の魔法の文字列を見つけるのに役立ちませんでした-いくつかのカーネルイメージをチェックして、圧縮解除コードを含む不変ヘッダーを見つける方が良いかもしれません。


1

上記の解凍行は私にとってはうまくいきました。もちろん、カーネルは削除されました。したがって、そこには良い情報はありません。

デバッグに入れるなど、古いカーネルに変更を加える必要がある場合は、を使用uname -rしてカーネルのリビジョンを取得し、ソースを取得します。

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

ソースは/usr/src/linux... cdソースツリーに入り、次のようになります。

make oldconfig
make

これにより、現在実行中のカーネルの構成を含むファイルが検索されます。通常は

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

このビルドに使用して、実行中のカーネルを再作成します。

思い通りに構築してください。必要に応じて、ストリップされていないカーネルにアクセスできます。

上記のシェルは、おそらくスペースのためにgzipマジック番号を見つけられません。はい、元の議論から1年後に書いていますが、彼らはまだ同じように圧縮されています。に出力を送信し、またはlessを検索します。残りのバイトを手動でチェックして一致を判別し、最初のインスタンスがあることを確認します。10進数であることを思い出して、見つかったオフセットを使用します。1f 8b1f

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.