ARM匯編指令調(diào)試方法
一、準(zhǔn)備ARM匯編程序
首先,我們構(gòu)造一段簡(jiǎn)單的ARM匯編程序作為測(cè)試代碼main.s。
本文引用地址:http://butianyuan.cn/article/201611/317876.htm.globl _start_start:mov R0,#0swi 0x00901
以上匯編指令完成了0號(hào)系統(tǒng)調(diào)用exit的調(diào)用。mov指令將系統(tǒng)調(diào)用號(hào)傳入寄存器R0,然后使用0x00901軟中斷陷入系統(tǒng)調(diào)用。
為了運(yùn)行ARM匯編代碼,需要使用交叉編譯器arm-linux-gcc對(duì)ARM匯編代碼進(jìn)行編譯。下載交叉編譯器安裝完畢后,對(duì)ARM匯編代碼進(jìn)行編譯。
arm-linux-gcc main.s -o main -nostdlib
編譯選項(xiàng)“-nostdlib”表示不使用任何運(yùn)行時(shí)庫(kù)文件,編譯生成的可執(zhí)行文件main只能在ARM體系結(jié)構(gòu)的系統(tǒng)上運(yùn)行。
二、編譯安裝qemu模擬器
為了x86的Linux系統(tǒng)內(nèi)運(yùn)行ARM體系結(jié)構(gòu)的可執(zhí)行程序,需要安裝qemu模擬器。
首先下載qemu源碼,然后保證系統(tǒng)已經(jīng)安裝了flex和bison。
編譯安裝qemu。
./configure --prefix=/usrsudo make && make install
然后使用qemu的ARM模擬器執(zhí)行ARM程序。
qemu ./main
三、編譯安裝arm-gdb
為了調(diào)試ARM程序,需要使用gdb的源碼編譯生成arm-gdb。
首先下載gdb源代碼,編譯安裝。
./configure --target=arm-linux --prefix=/usr/localsudo make && make install
為了和系統(tǒng)的gdb避免沖突,我們將gdb的安裝目錄安裝到/usr/local,然后建立軟鏈接即可。
ln -s /usr/bin/arm-gdb /usr/local/gdb/gdb
之后便可以使用arm-gdb命令調(diào)試ARM程序了。
四、調(diào)試ARM程序
首先使用qemu打開(kāi)遠(yuǎn)程調(diào)試端口。
qemu-arm -g 1024 ./main
然后導(dǎo)出環(huán)境變量QEMU_GDB。
export QEMU_GDB=/usr/local/gdb
最后,進(jìn)入gdb調(diào)試。
arm-gdb ./main
進(jìn)入arm-gdb后,首先連接遠(yuǎn)程調(diào)試端口。
(gdb) target remote localhost:1024
然后使用gdb常用的調(diào)試命令調(diào)試代碼即可。
(gdb) disassemble // 查看反匯編(gdb) x /8xw 0x0808e // 查看內(nèi)存(gdb) info register // 查看寄存器(gdb) continue // 繼續(xù)執(zhí)行(gdb) stepi // 匯編級(jí)逐過(guò)程(gdb) nexti // 匯編級(jí)逐語(yǔ)句
評(píng)論