歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

ARM匯編指令調試方法

學習ARM匯編時,少不了對ARM匯編指令的調試。作為支持多語言的調試器,gdb自然是較好的選擇。調試器工作時,一般通過修改代碼段的內容構造trap軟中斷指令,實現程序的暫停和程序執行狀態的監控。為了在x86平台上執行ARM指令,可以使用qemu模擬器執行ARM匯編指令。

一、准備ARM匯編程序

首先,我們構造一段簡單的ARM匯編程序作為測試代碼main.s。

.globl _start
_start:
	mov R0,#0
	swi	0x00900001

以上匯編指令完成了0號系統調用exit的調用。mov指令將系統調用號傳入寄存器R0,然後使用0x00900001軟中斷陷入系統調用。

為了運行ARM匯編代碼,需要使用交叉編譯器arm-linux-gcc對ARM匯編代碼進行編譯。下載交叉編譯器安裝完畢後,對ARM匯編代碼進行編譯。

arm-linux-gcc main.s -o main -nostdlib

編譯選項“-nostdlib”表示不使用任何運行時庫文件,編譯生成的可執行文件main只能在ARM體系結構的系統上運行。

二、編譯安裝qemu模擬器

為了x86的Linux系統內運行ARM體系結構的可執行程序,需要安裝qemu模擬器。

首先下載qemu源碼,然後保證系統已經安裝了flex和bison。

編譯安裝qemu。

./configure --prefix=/usr
sudo make && make install

然後使用qemu的ARM模擬器執行ARM程序。

qemu ./main

三、編譯安裝arm-gdb

為了調試ARM程序,需要使用gdb的源碼編譯生成arm-gdb。

首先下載gdb源代碼,編譯安裝。

./configure --target=arm-linux --prefix=/usr/local
sudo make && make install

為了和系統的gdb避免沖突,我們將gdb的安裝目錄安裝到/usr/local,然後建立軟鏈接即可。

ln -s /usr/bin/arm-gdb /usr/local/gdb/gdb

之後便可以使用arm-gdb命令調試ARM程序了。

四、調試ARM程序

首先使用qemu打開遠程調試端口。

qemu-arm -g 1024 ./main

然後導出環境變量QEMU_GDB。

export QEMU_GDB=/usr/local/gdb

最後,進入gdb調試。

arm-gdb ./main

進入arm-gdb後,首先連接遠程調試端口。

(gdb) target remote localhost:1024

然後使用gdb常用的調試命令調試代碼即可。

(gdb) disassemble			// 查看反匯編
(gdb) x /8xw 0x0000808e		// 查看內存
(gdb) info register			// 查看寄存器
(gdb) continue				// 繼續執行
(gdb) stepi					// 匯編級逐過程
(gdb) nexti					// 匯編級逐語句

GDB調試程序用法 http://www.linuxidc.com/Linux/2013-06/86044.htm

GDB+GDBserver無源碼調試Android 動態鏈接庫的技巧 http://www.linuxidc.com/Linux/2013-06/85936.htm

使用hello-gl2建立ndk-GDB環境(有源碼和無源碼調試環境) http://www.linuxidc.com/Linux/2013-06/85935.htm

在Ubuntu上用GDB調試printf源碼 http://www.linuxidc.com/Linux/2013-03/80346.htm

Linux下用GDB調試可加載模塊 http://www.linuxidc.com/Linux/2013-01/77969.htm

Ubuntu下使用GDB斷點Go程序 http://www.linuxidc.com/Linux/2012-06/62941.htm

使用GDB命令行調試器調試C/C++程序 http://www.linuxidc.com/Linux/2014-11/109845.htm

GDB 的詳細介紹:請點這裡
GDB 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved