最近在学习ARM汇编语言,但是ARM不像x86,可以很方便的调试。不过还好有虚拟机,而且还有GDB这样万能的调试器。Google了很久,又结合自己的
最近在学习ARM汇编语言,可是ARM不像x86,能够很便利的调试。不过还好有虚拟机,并且还有GDB这样全能的调试器。Google了好久,又结合自己的实践,总算成功的调试了ARM的汇编,在此向对ARM嵌入式开发感兴趣的同学共享一下。
首要阐明需求的东西
1. QEMU
这个模仿器不只能够模仿x86,还能够模仿ARM和MIPS,可谓强壮 2. GDB(源代码)不必说了,全能调试器,可是需求从源代码编译 3. arm–linux穿插东西链我用的是自己开发板配套的3.4版别,去随意下载一个就能够(不过形似uclinux被GFW了……)
先编译GDB,设置target为ARM渠道: $ ./configure –target=arm-linux $ make
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(为什么不能不清楚,不过是实验成果): $ ./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还支撑Thumb指令集和Jazelle指令集,应该都能够这样调试的 |
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/263197.html