linux下ARM汇编程序的调试

http://blog.sina.com.cn/s/blog_59fd92c40100h4v2.html


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

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

先编译GDB,设置target为ARM平台:
./configuretarget=armlinux make

OK,开始写汇编程序,sample代码很简单,给3个寄存器赋值,之后死循环。注意一定要死循环,否则的话会遇到非法指令或者未知指令。

=======test.S========
.globl _start
_start:
  mov r0, #0
  mov r1, #1
  mov r2, #2
loop:
  b loop
=======EOF=========

编译:
./armlinxasotest.otest.S ./arm-linux-ld -o test test.o
此时可以用objdump查看test的内容:
./armlinuxobjdumpdtestqemugdb qemu-arm -g 11111 test
之后启动gdb,注意启动的时候要指明test,不能启动之后用file指定test(为什么不能不清楚,不过是试验结果):
./gdb/PATHTOTESTgdbgdbgdb(gdb)targetremotelocalhost:1111111111(gdb)disassemble(gdb)display/10ipc-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指令集,应该都可以这样调试的
<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>
阅读(888) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~
评论热议
posted @   张同光  阅读(484)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示