1
我交叉編譯的hello.c與ARM-Linux的gnueabi-GCC用arm-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
>qemu-arm ./hello
hello, world
那麼,我爲什麼可以運行打招呼直接與./hello
>./hello
hello, world
爲什麼以及如何發生的?
2017年3月19日修訂:
我已經測試了x86_64的用戶程序不與QEMU臂可運行
> 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 /維基/ Binfmt_misc)? '文件hello'仍然顯示ARM?運行'pwd',並確保你的路徑仍然在你的想法。 –
直到你提到它,我對binfmt_misc一無所知。這個精靈可能同時包含x86和arm嗎? –
您的系統可能已配置(可能使用[binfmt_misc](https://en.wikipedia.org/wiki/Binfmt_misc)...)在ARM的每個ELF文件上運行'qemu-arm'。 –