システムメモリを読み込んで実行中のシステムからカーネルイメージ(bzImage、vmlinuzなど)を取得できますか?
答え1
いいえ、できません。
基本的な問題は、カーネルイメージがメモリに直接ロードされますが、カーネルが起動するとイメージが変更されることです。カーネルは実際にはプログラムではありませんが、プログラムがメモリにコンパイル/ロードされる方法に関する多くの規則がまだ適用されます。
次のCコードを例にしてみましょう。
char x=5
int some_function() {
x=100;
}
最初の行は、x=5
後で使用できるように、数値5をメモリ内のバイトに入れるようにコンパイラに指示します。プログラムが実行されると、このバイトは他のすべてと一緒にメモリに直接ロードされます。
次の行は、x=100
実行時に元の値を上書きする機械語コードを記述するようにコンパイラに指示します。したがって、実行中のプログラムをメモリから抽出してデコンパイルすると、次の内容が表示されます。
char x=100
int some_function() {
x=100;
}
実際に実行されているプログラムは独自に書き直されました。
同様に、ユーザーモードプログラムは次の場所に保存されます。ELF形式。ユーザーレベルのプログラムを実行すると、プログラムローダーはさまざまな部分でプログラムイメージを組み合わせる必要があります。カーネルルールは今や少し異なりますが、類似点があります。modprobe
実行中のカーネルのメモリ空間に別のファイルをロードします。
したがって、カーネルのメモリ全体をダンプする方法を見つけることができますが、結果は実際には元のカーネルイメージにはあまり似ていないため、確実に起動するのに十分ではありません。
私はここであなたが心配しています。最高オプションは、システム管理者に行き、コピーを要求するか、アクセスを要求することです。