<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > linux下ARM匯編程序的調試

linux下ARM匯編程序的調試

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

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

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

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

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

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



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

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>