私はいくつかのelfファイルのヘッダーを見ていたときに奇妙な点を見つけました。
ELF Header:
Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, big endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: MIPS R3000
Version: 0x1
...
Flags: 0x80000027, noreorder, pic, cpic, abi2, mips64r2
...
ELF32とマークされていますが、mips64r2フラグがあるのはなぜですか?これはどういう意味ですか?これは、ファイルが64ビットプロセッサで実行されるように32ビットプログラムにコンパイルされたことを意味しますか?
また、mips64r2で実行している場合、マシンにMIPS r3000というラベルが付けられたのはなぜですか?
qemuで実行するにはどのような環境が必要ですか? mips64 r2?ミップスr3000?
答え1
私は組み込みLinuxの専門家ではありませんが、最近Busyboxルーターに「Hello World」アプリケーションを書いています。また、ルータのプロセッサタイプは同じです(MIPS R3000)。
多くの組み込みデバイスと同様に、ルータにもLinuxが組み込まれています。プロセッサとアーキテクチャは異なりますが、Linuxシステムなので、同じ実行可能ファイル形式であるELF32/64をサポートしています。
マシンを「MIPS R3000」とマークし、フラグを「mips64r2」とマークする理由は、ターゲットアーキテクチャと特定のプロセッサタイプを示します。異なるプロセッサは同じアーキテクチャを使用することができ、同じアーキテクチャは異なるフラグを見ることができる。しかし、私の注目を集めたのは、R3000が32ビットアーキテクチャであるということです。私の場合、フラグは「mips32」なので、32ビットアーキテクチャにmips64r2があり、32ビットELFファイル(64ビットのようです)は次のようになります。少し変です。
MIPSの公式文書を確認してください。参考になれば幸いです。