您的位置 首页 电路

ARM汇编调试

最近在学习ARM的汇编,但是ARM不像x86,可以很方便的调试。不过还好有虚拟机,而且还有GDB这样万能的调试器。Google了很久,又结合自己的实…

最近在学习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

$ 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指令集,应该都能够这样调试的

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/dianlu/264214.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部