新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > linux下ARM匯編程序的調(diào)試

        linux下ARM匯編程序的調(diào)試

        作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
        最近在學(xué)習(xí)ARM匯編語(yǔ)言,但是ARM不像x86,可以很方便的調(diào)試。不過(guò)還好有虛擬機(jī),而且還有GDB這樣萬(wàn)能的調(diào)試器。Google了很久,又結(jié)合自己的實(shí)踐,終于成功的調(diào)試了ARM的匯編,在此向?qū)RM嵌入式開(kāi)發(fā)感興趣的同學(xué)分享一下。

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

        先編譯GDB,設(shè)置target為ARM平臺(tái):
        $ ./configure --target=arm-linux
        $ make

        OK,開(kāi)始寫(xiě)匯編程序,sample代碼很簡(jiǎn)單,給3個(gè)寄存器賦值,之后死循環(huán)。注意一定要死循環(huán),否則的話會(huì)遇到非法指令或者未知指令。

        =======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
        此時(shí)可以用objdump查看test的內(nèi)容:
        $ ./arm-linux-objdump -d test
        接下來(lái)就是調(diào)試了,用qemu啟動(dòng)gdb端口監(jiān)聽(tīng):
        $ qemu-arm -g 11111 test
        之后啟動(dòng)gdb,注意啟動(dòng)的時(shí)候要指明test,不能啟動(dòng)之后用file指定test(為什么不能不清楚,不過(guò)是試驗(yàn)結(jié)果):
        $ ./gdb /PATH_TO_TEST 注意這里的gdb不是系統(tǒng)的gdb,而是剛剛編譯好的gdb
        (gdb) target remote localhost:11111 設(shè)置目標(biāo)為本機(jī)11111端口
        (gdb) disassemble 反匯編
        (gdb) display /10i $pc-16 這個(gè)命令是顯示當(dāng)前pc附近的10條指令,代替調(diào)試x86程序的list命令
        (gdb) si si,不是s,是單步執(zhí)行指令,如果是s的話就會(huì)執(zhí)行到下一個(gè)標(biāo)號(hào)處。類似的還有ni
        (gdb) info register 嗯,這個(gè)就是查看寄存器的值啦~
        (gdb) x /16 0 這個(gè)是查看0x00000000開(kāi)始的16個(gè)字(32 bits per word)的內(nèi)存信息

        差不多就知道這些了,有一個(gè)問(wèn)題是不知道如何設(shè)置指令的斷點(diǎn),以后再試吧……

        現(xiàn)在可以邊看書(shū)邊動(dòng)手嵌入式項(xiàng)目實(shí)戰(zhàn)了~QEMU還支持Thumb指令集和Jazelle指令集,應(yīng)該都可以這樣調(diào)試的



        關(guān)鍵詞: linuxARM匯編程序調(diào)

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 宁化县| 青冈县| 凤台县| 沽源县| 胶州市| 葫芦岛市| 芜湖市| 正安县| 翁牛特旗| 西宁市| 辽阳县| 会同县| 湄潭县| 安龙县| 庆城县| 乌鲁木齐县| 六枝特区| 阜平县| 搜索| 合水县| 清镇市| 江津市| 河南省| 潍坊市| 博野县| 凯里市| 东乌珠穆沁旗| 称多县| 金堂县| 寿阳县| 永善县| 岳阳县| 临汾市| 公安县| 安西县| 崇仁县| 大新县| 福海县| 明水县| 嵊州市| 邵武市|