zoukankan      html  css  js  c++  java
  • ARM汇编调试

    http://blog.csdn.net/yming0221/article/details/6270879


    最近在学习ARM的汇编,但是ARM不像x86,可以很方便的调试。不过还好有虚拟机,而且还有GDB这样万能的调试器。Google了很久,又结合自己的实践,终于成功的调试了ARM的汇编,在此向对ARM嵌入式感兴趣的同学分享一下。

    首先说明需要的工具
    1. QEMU  
    这个模拟器不仅可以模拟x86,还可以模拟ARMMIPS,可谓强大
    2. GDB
    (源代码)  不用说了,万能调试器,但是需要从源代码编译
    3. arm-linux
    交叉工具链  我用的是自己开发板配套的3.4版本,不过去www.uclinux.org随便下载一个就可以(不过貌似uclinux**了……)

    先编译GDB,设置targetARM平台:
    $ ./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-linux-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指令集,应该都可以这样调试的

     

    <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
    阅读(189) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~
    评论热议
  • 相关阅读:
    机器学习的定义和分类
    选股
    mysql修改密码
    快速排序
    php的错误类型
    MySQL数据库优化
    库存超卖问题
    循环处理
    kafka安装配置
    JavaScript、jQuery杂记
  • 原文地址:https://www.cnblogs.com/ztguang/p/12648405.html
Copyright © 2011-2022 走看看