4
我在學習一門課程中學習arm彙編語言。我在入門時遇到小問題。我已經寫了一個簡單的C代碼:與qemu一起運行二進制文件
int main()
{
int a = 10;
int b = 20;
int c = a+b;
}
然後,我通過給予命令使用GNU臂它轉換成彙編代碼:
arm-elf-gcc -S first.c
這個生成包含彙編代碼的文件first.s:
arm-elf-gcc -g first.s
012:
.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"
然後我使用下面的命令編譯彙編代碼
這生成了a.out二進制文件。然後我試圖用QEMU使用命令運行的a.out:
qemu-arm a.out
但這產生輸出
Segmentation fault
我找不到錯誤,我究竟做錯了什麼?
我用命令'QEMU臂-L ./gnemul/qemu-arm。/ a.out'但沒有幫助,它再次給出相同的'Segmentation fault'。我已經從linux-user-test文件夾粘貼了'gnemul'文件夾。 – UNK 2012-08-10 10:33:57
試用** qemu-arm -L/usr/arm-linux-gnueabi/./a.out**。在此之前,您需要安裝arm-linux-gnueabi-gcc。並使用arm-linux-gnueabi-gcc進行編譯。這對我有用。 – 2012-08-12 14:01:26