天天看點

用QEMU模拟調試裸機ARM64彙編,支援gdb單步調試1.測試代碼test.S2. 編譯3.qemu模拟調試

完全是友善自己查詢,做個記錄。

樹莓派4的SOC是ARM64, cortex A72,支援最新的ARMv8指令集,且有衆多的開源資料,适合用來學習ARM64彙編,其他晶片大同小異,遇到需要,再進一步研究qemu支援的晶片;

最新版官方qemu尚未支援樹莓派4, 這裡直接采用笨叔提供的qemu工具

1.測試代碼test.S

.global _start
_start:
        mov x1,0x80000
        mov x3,16

        ldr x0,[x1]
        ldr x2, [x1,#8]
        ldr x4, [x1,x3]
        ldr x5, [x1,x3,lsl #3]
           

2. 編譯

makefile檔案

ARMGNU ?= aarch64-linux-gnu
test.elf: test.o
        $(ARMGNU)-ld -Ttext 0x0  -o test.elf   $^
%.o : %.S
        $(ARMGNU)-gcc  -o $@ $<  -g  -c
clean:
        rm *.o *.elf    -f
           

3.qemu模拟調試

由于qemu自帶gdb_server,這裡用gdb來單步調試

3.1 啟動qemu

qemu-system-aarch64 -machine raspi4 -nographic -kernel test.elf -S -s
           

3.2 再開一個終端,啟動gdb,連結qemu

gdb-multiarch --tui benos.elf 
           

連結gdb_server

用QEMU模拟調試裸機ARM64彙編,支援gdb單步調試1.測試代碼test.S2. 編譯3.qemu模拟調試

``

檢視寄存器值

用QEMU模拟調試裸機ARM64彙編,支援gdb單步調試1.測試代碼test.S2. 編譯3.qemu模拟調試

3.3 用eclipse可視化環境調試

(1).建立一個新工程test,添加帶調試資訊的程式test.elf,配置如下:

用QEMU模拟調試裸機ARM64彙編,支援gdb單步調試1.測試代碼test.S2. 編譯3.qemu模拟調試

連結成功後,啟動gdb,可以友善檢視寄存器或變量值如下:

用QEMU模拟調試裸機ARM64彙編,支援gdb單步調試1.測試代碼test.S2. 編譯3.qemu模拟調試