我用arm-linux-gnueabi-gcc
交叉编译了hello.c>arm-linux-gnueabi-gcc -static -o hello hello.c -g
我已经检查了./hello的格式,它是一个arm用户程序!
>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-arm能够运行./hello
>qemu-arm ./hello
hello, world
然后,为什么我可以直接用./hello
运行你好>./hello
hello, world
为什么以及如何发生这种情况?
2017/3/19编辑:
我已经测试过用qemu-arm
无法运行x86_64用户程序> gcc -o hello_x86 hello.c
> qemu-arm hello_x86
hello_x86: Invalid ELF image for this architecture
2017/3/19编辑:
我删除了本文中的gdb部分。这里gdb功能不正常。我看到的装配不是来自这个程序。
答案 0 :(得分:0)
实际上我需要链接地址0x0010000的软件才能在主机上执行访客代码,因为QEMU仿真器专门用于模拟Linux客户系统;因此,它的启动过程是专门实现的:-kernel选项在系统内存中加载一个二进制文件(通常是一个Linux内核),从地址0x00010000开始。模拟器在地址0x00000000处开始执行,因此我们需要将二进制文件放在正确的地址
中我遵循此tutorial,它适用于我