就一个简单的 c 程序:
```c
#include <stdio.h>
int main()
{
    printf("Hello, World\n");
}
```
使用如下命令编译:
```
riscv64-linux-gnu-gcc --static hello.c -o hello_riscv64
```
居然可以直接运行
```
> ./hello_riscv64
Hello, World
```
使用 qemu 也能运行:
```
> qemu-riscv64-static  hello_riscv64
Hello, World
```

readelf 结果:
```
> readelf -h hello_riscv64
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           RISC-V
  Version:                           0x1
  Entry point address:               0x1054c
  Start of program headers:          64 (bytes into file)
  Start of section headers:          501880 (bytes into file)
  Flags:                             0x5, RVC, double-float ABI
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         7
  Size of section headers:           64 (bytes)
  Number of section headers:         28
  Section header string table index: 27
```
举报· 84 次点击
登录 注册 站外分享
6 条回复  
koebehshian 小成 2024-4-4 18:13:35
又不是裸机,操作系统解释了吧
SteveLee 小成 2024-4-4 18:21:30
可能 binfmt_misc 自动调用 qemu 了,可以 ls /proc/sys/fs/binfmt_misc/ 看下
anntt 小成 2024-4-4 18:36:22
亲测不能运行,不知道题主那里的问题
pagxir 小成 2024-4-4 18:54:37
因为是用 qemu-user 解释执行了。效率很低,arm64/arm 一样可以解释执行。
peachpeach 小成 2024-4-4 19:04:07
你可以理解 qemu 就是个虚拟机, 虚拟各种 CPU 架构, 甚至可以虚拟嵌入式开发板
jim9606 小成 2024-4-5 00:28:59
可能是利用了内核的 binfmt_misc 机制自动调用 qemu 运行了。
返回顶部