使用qemu运行二进制文件

6

我正在学习一门与ARM汇编语言相关的课程,但是在开始时遇到了些问题。我已经写了一个简单的C语言代码:

int main()
{
    int a = 10;
    int b = 20;
    int c = a+b;
}

我使用gnu arm命令将其转换为汇编代码:

arm-elf-gcc -S first.c

这将生成一个名为first.s的文件,其中包含汇编代码:
    .file   "first.c"
    .text
    .align  2
    .global main
    .type   main, %function
main:
    @ args = 0, pretend = 0, frame = 12
    @ frame_needed = 1, uses_anonymous_args = 0
    mov ip, sp
    stmfd   sp!, {fp, ip, lr, pc}
    sub fp, ip, #4
    sub sp, sp, #12
    mov r3, #10
    str r3, [fp, #-16]
    mov r3, #20
    str r3, [fp, #-20]
    ldr r2, [fp, #-16]
    ldr r3, [fp, #-20]
    add r3, r2, r3
    str r3, [fp, #-24]
    mov r0, r3
    sub sp, fp, #12
    ldmfd   sp, {fp, sp, pc}
    .size   main, .-main
    .ident  "GCC: (GNU) 3.4.3"

然后我使用以下命令编译汇编代码:

arm-elf-gcc -g first.s

这生成了一个 a.out 二进制文件。然后我尝试使用 qemu 命令运行 a.out:
qemu-arm a.out

但是这会生成输出。
Segmentation fault

我找不到错误,我做错了什么吗?

1个回答

6

我使用了命令 qemu-arm -L ./gnemul/qemu-arm ./a.out,但是没有帮助,它仍然显示相同的 Segmentation fault。我已经将 gnemul 文件夹从 linux-user-test 文件夹中复制过来了。 - UNK
1
尝试使用 qemu-arm -L /usr/arm-linux-gnueabi/ ./a.out。在此之前,您需要安装 arm-linux-gnueabi-gcc,并且还要使用 arm-linux-gnueabi-gcc 进行编译。这对我有效。 - duslabo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接