この問題」どのパーティションにどのオペレーティングシステムがあるかを確認してください。「実際にそのディストリビューションから起動しなくても、インストールされたディストリビューションで実行可能ファイルを実行できるかどうかを考えました。
この質問に対する答えは「chmod -R 000 /binから回復するには?「インストールされたディストロパーティションからローダーを呼び出すことができると思いました。
可能ですか?
はい
いざやってみるとうまくいかないのに、また別の部分が抜けたのではないかという気がします。
私が使用したいコマンドはですlsb_release
。重要な場合は、現在64ビットFedora 14をインストールしています。
$ sudo /lib/ld-2.13.so /usr/bin/lsb_release
/usr/bin/lsb_release: error while loading shared libraries: /usr/bin/lsb_release: invalid ELF header
答え1
はい、実行中のカーネルがインストールされているディストリビューションでバイナリを実行できる場合は可能です。
これを行うには、インストールされているディストリビューションが実行されているプロセッサアーキテクチャまたは互換性のあるプロセッサアーキテクチャに適している必要があります。たとえば、x86プロセッサではARMバイナリを実行できません。互換性はCPUによって異なります。たとえば、x86 / amd64では、64ビットバイナリは64ビットCPUでのみ実行され、32ビットバイナリは32ビットおよび64ビットCPUの両方で実行されます。互換性はオペレーティングシステムによって異なります。たとえば、x86_64 CPUでは、Solarisは32ビットカーネルと64ビットカーネルで区別なく64ビットおよび32ビットプログラムを実行でき、Linux 64ビットカーネルは32ビットプログラムを実行できます。しかし、その逆ではありません。 OpenBSD 64ビットカーネルは32ビットプログラムを実行できません。
静的にリンクされた実行可能ファイルは、固定された場所でファイルが見つからない限り、問題なくその場で実行されます。インストールされているディストリビューションに最新バージョンのCライブラリがあるか、別のCライブラリ(例:uClibc対Glibc)を使用するか、ホストがユーザースペース(たとえば、i386およびamd64、armhf、およびarmel)。
場合によっては、動的にリンクされた実行可能ファイルが機能するようにダイナミックリンカーを明示的に呼び出し、インストールされているシステムのライブラリディレクトリをライブラリ検索パスに最初に配置する必要があります。
LD_LIBRARY_PATH=/mnt/lib:/mnt/usr/lib /mnt/lib/ld-linux.so.2 /mnt/bin/foo
インストールされたシステムのプログラムが必要なもの(ローダー、ライブラリ、構成ファイル、データファイルなど)を見つけることを容易にする方法です。chroot。 chrootはファイルシステムの表示を単一のディレクトリとそのサブディレクトリに制限します。ルートのみこのchroot
コマンドを呼び出すことができます。
chroot /mnt /bin/foo
プログラムはrootとして実行されるため、/mnt
その階層の外側には何も表示されません。 no /home
(またはの項目/mnt
)、no /proc
、static defaults/dev
などのみが表示されます。特殊ファイルシステムは、外部()または内部()から/proc
chrootにマウントできます。 Linuxでは、ディレクトリを使用したり、2番目の場所に再マウントしたり(元の場所に保持したり)、指定されたディレクトリにマウントされたファイルシステムをコピーできます。mount -t proc proc /mnt/proc
mount -t proc proc /proc
mount --bind
mount --rbind
mount --rbind /dev /mnt/dev
mount --bind /home /mnt/home
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt /bin/foo
Debian と他のディストリビューションは次のソフトウェアを提供します。シュルートこれらのインストールを自動化し、その他の詳細を実行します。ワンタイム作業では少し過剰ですが、必要に応じて便利です。複数のディストリビューションを維持。