新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM匯編調試

        ARM匯編調試

        作者: 時間:2016-11-20 來源:網絡 收藏
        最近在學習ARM的匯編,但是ARM不像x86,可以很方便的調試。不過還好有虛擬機,而且還有GDB這樣萬能的調試器。Google了很久,又結合自己的實踐,終于成功的調試了ARM的匯編,在此向對ARM嵌入式感興趣的同學分享一下。


        首先說明需要的工具
        1. QEMU這個模擬器不僅可以模擬x86,還可以模擬ARM和MIPS,可謂強大
        2. GDB(源代碼)不用說了,萬能調試器,但是需要從源代碼編譯
        3. arm-linux交叉工具鏈我用的是自己開發板配套的3.4版本,不過去www.uclinux.org隨便下載一個就可以(不過貌似uclinux被GFW了……)

        先編譯GDB,設置target為ARM平臺:
        $ ./configure --target=arm-linux
        $ make

        本文引用地址:http://www.104case.com/article/201611/318852.htm

        $ make install

        注:默認目錄/usr/local/bin/

        OK,開始寫匯編程序,sample代碼很簡單,給3個寄存器賦值,之后死循環。注意一定要死循環,否則的話會遇到非法指令或者未知指令。

        =======test.S========
        .globl _start
        _start:
        mov r0, #0
        mov r1, #1
        mov r2, #2
        loop:
        b loop
        =======EOF=========

        編譯:
        $ arm-linx-as -o test.o test.S
        鏈接:
        $ arm-linux-ld -o test test.o
        此時可以用objdump查看test的內容:
        $ arm-linux-objdump -d test
        接下來就是調試了,用qemu啟動gdb端口監聽:
        $ qemu-arm -g 11111 test
        之后啟動gdb,注意啟動的時候要指明test,不能啟動之后用file指定test(為什么不能不清楚,不過是試驗結果):
        $ arm-linux-gdb /PATH_TO_TEST 注意這里的gdb不是系統的gdb,而是剛剛編譯好的gdb
        (gdb) target remote localhost:11111 設置目標為本機11111端口
        (gdb) disassemble 反匯編
        (gdb) display /10i $pc-16 這個命令是顯示當前pc附近的10條指令,代替調試x86程序的list命令
        (gdb) si si,不是s,是單步執行指令,如果是s的話就會執行到下一個標號處。類似的還有ni
        (gdb) info register 嗯,這個就是查看寄存器的值啦~
        (gdb) x /16 0 這個是查看0x00000000開始的16個字(32 bits per word)的內存信息

        差不多就知道這些了,有一個問題是不知道如何設置指令的斷點,以后再試吧……
        如果直接運行程序,直接

        qemu-arm test
        現在可以邊看書邊動手實踐了~QEMU還支持Thumb指令集和Jazelle指令集,應該都可以這樣調試的



        關鍵詞: ARM匯編調

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 兰考县| 齐齐哈尔市| 灵宝市| 沙田区| 洛川县| 武陟县| 水城县| 壶关县| 临清市| 申扎县| 青海省| 静乐县| 商丘市| 济阳县| 日照市| 尚志市| 柳林县| 浮山县| 天津市| 华池县| 四会市| 阳信县| 大兴区| 营山县| 高淳县| 昭通市| 铁岭县| 庆城县| 阿城市| 福泉市| 海安县| 绵阳市| 顺平县| 菏泽市| 左贡县| 张家川| 井陉县| 凌源市| 齐齐哈尔市| 永寿县| 施甸县|