linux下ARM汇编程序的调试
来源:互联网 发布:淘宝鬼脚七离婚真相 编辑:程序博客网 时间:2024/05/14 08:12
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平台:
$ ./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个字(32bits per word)的内存信息
差不多就知道这些了,有一个问题是不知道如何设置指令的断点,以后再试吧……
现在可以边看书边动手实践了~ QEMU还支持Thumb指令集和Jazelle指令集,应该都可以这样调试的
最近在学习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平台:
$ ./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个字(32bits per word)的内存信息
差不多就知道这些了,有一个问题是不知道如何设置指令的断点,以后再试吧……
现在可以边看书边动手实践了~ QEMU还支持Thumb指令集和Jazelle指令集,应该都可以这样调试的
0
上一篇:ARM标准汇编与GNU汇编
下一篇:安装skyeye1.3.3 过程中可能遇到的问题
相关热门文章
- 欢迎武汉linux新手在ChinaUnix...
- 欢迎linux168china在ChinaUnix...
- 开源负载均衡LVS随机自启动异...
- 欢迎流浪猫的linux在ChinaUnix...
- 欢迎looker_linux在ChinaUnix...
- SHTML是什么_SSI有什么用...
- shell中字符串操作
- 卡尔曼滤波的原理说明...
- 关于java中的“错误:找不到或...
- shell中的特殊字符
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
- linux下ARM汇编程序的调试
- Linux下的汇编程序设计
- Linux下的汇编程序设计
- Linux下的汇编程序设计
- arm-linux下的多线程调试
- Linux下最简单的汇编程序
- Linux下最简单的汇编程序
- 调试第一个汇编程序(下)
- 关于ARM汇编程序的理解
- GDB 调试汇编程序的方法
- 【汇编】Linux 下汇编程序开发
- Linux下实现编写汇编程序
- linux下建立arm-gdb调试环境
- Linux下汇编程序及系统调用的深入分析
- Windows64位下使用debug调试汇编程序
- 写ARM汇编程序的一个注意事项
- ARM汇编程序语言程序设计的学习小节_1
- arm程序的反汇编程序 试读
- 最近在chromium内核上修改完成的“内核离线缓存”功能
- java正则表达式
- Android工程笔记:通用XML属性
- ARM标准汇编与GNU汇编
- LeetCode 38 Count and Say
- linux下ARM汇编程序的调试
- 安装skyeye1.3.3 过程中可能遇到的问题
- /bin/sh: can
- js返回上一页并刷新的方法
- skyeye相关命令简介
- Activity的生命周期全面分析
- {head first} --- networking 2
- 使用图形界面调试arm程序: insight + gdb
- 常用的正则表达式
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
宝宝长期腹泻怎么办
出生小孩拉稀怎么办
新生婴拉肚子怎么办
五天婴儿拉稀怎么办
出生婴儿拉肚子怎么办
新生儿黑白颠倒怎么办
宝宝漾奶还总吃怎么办
新生儿低烧37.5怎么办
月子新生儿低烧怎么办
新生儿低烧37.4怎么办
新生儿小孩漾奶怎么办
新生儿漾奶严重怎么办
婴儿漾奶有奶瓣怎么办
婴儿老是漾奶怎么办
婴儿经常漾奶怎么办
婴儿漾奶严重怎么办
小孩吃奶呛到肺怎么办
宝宝皮肤脱皮怎么办
宝宝长扁平疣怎么办
新生儿全身脱皮怎么办
小孩毛发旺盛怎么办
婴儿脚丫子脱皮怎么办
小儿长湿疹怎么办
脐带发炎化脓怎么办
双头婴儿怎么办
脐带落了怎么办
脐带10天还没掉怎么办
婴儿红皮股怎么办
脐带脱落后有脓怎么办
贴完膜下雨怎么办
刚贴完膜下雨怎么办
我想学普子怎么办歌谱
电视机no signal怎么办
宝马no signal怎么办
被打到眼睛充血怎么办
被多人打了怎么办
自己要被打了怎么办
领导能力不行怎么办
水平不行怎么办
能力不行怎么办
抗压能力不行怎么办