私はRaspberry Pi 3で単純な「Hello World」CプログラムをコンパイルしてAMD64ノートブックに転送しました。好奇心が強いのに実行されるとは思わなかったが、次のように実行された。
$ uname -a
Linux 15ud490-gx76k 6.5.0-25-generic #25~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Feb 20 16:09:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
$ file hello64
hello64: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=486ee1cde035cd704b49c037a32fb77239b6a1c2, for GNU/Linux 3.7.0, not stripped
$ ./hello64
Hello World!
このような場合、どのように実装しますか?
QEMUユーザーエミュレーションがインストールされていますが、その役割を果たしているかどうかはわかりません。
答え1
QEMUユーザーエミュレーションは、バイナリがすぐに実行される理由です。システムにインストールするQEMU関連パッケージの1つは、QEMUがエミュレートできるすべてのアーキテクチャのハンドラとして登録されるようにし、カーネルはバイナリをここに渡します。バイナリは、必要なライブラリ(存在する場合)がある限り実行されます。バイナリは静的にリンクされているため、外部依存関係はありません。
バラよりBusyBox静的にコンパイルされたARMバイナリがx86_64 PCで実行されるのはなぜですか?そしてモノの驚くべき点は何ですか?もっと学ぶ。