Iアームのlinux-gnueabi-GCCとのクロスコンパイルのhello.carm-linux-xxx-gccでコンパイルしたユーザープログラムは、x86マシン上で動作しますか?
>arm-linux-gnueabi-gcc -static -o hello hello.c -g
私は./helloの形式をチェックしました、それは腕のユーザプログラムです!
>file ./hello
hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=d56f37000fa4ae28889f3c785ed55b1dd48bdda7, not stripped
、およびQEMU-アームは、なぜ私は./hello
>./hello
hello, world
なぜ、どのようにこれが起こってハロー直接実行することができ、その後./hello
>qemu-arm ./hello
hello, world
を実行することができます?
2017年3月19日編集:
私はx86_64版のユーザプログラムはQEMU-アームとrunableされていないことをテストしてみた
> gcc -o hello_x86 hello.c
> qemu-arm hello_x86
hello_x86: Invalid ELF image for this architecture
2017年3月19日に編集:
この記事ではgdbの部分を削除しました。 gdbはここで正しく機能していません。そして、私が見たアセンブリは、このプログラムからではありません。
あなたは[binfmt_misc]で演奏されている(https://でエン.wikipedia.org/wiki/Binfmt_misc)? 'file hello'はまだARMを表示していますか? 'pwd'を実行し、あなたのパスがまだあなたが思うところにいることを確認してください。 –
あなたがそれを言及するまで私はbinfmt_miscについて何も知らない。 elfにx86とarmが同時に存在する可能性はありますか? –
あなたのシステムは(おそらく[binfmt_misc](https://en.wikipedia.org/wiki/Binfmt_misc)...)ARMのすべてのELFファイルで 'qemu-arm'を実行するように設定されているかもしれません。 –