学习ARM汇编时,少不了对ARM汇编指令的调试。作为支持多语言的调试器,gdb自然是较好的选择。调试器工作时,一般通过修改代码段的内容构造trap软中断指令,实现程序的暂停和程序执行状态的监控。为了在x86平台上执行ARM指令,可以使用qemu模拟器执行ARM汇编指令。

一、准备ARM汇编程序

首先,我们构造一段简单的ARM汇编程序作为测试代码main.s。

.globl _start
_start:mov R0,#0swi 0x00900001

以上汇编指令完成了0号系统调用exit的调用。mov指令将系统调用号传入寄存器R0,然后使用0x00900001软中断陷入系统调用。

为了运行ARM汇编代码,需要使用交叉编译器arm-linux-gcc对ARM汇编代码进行编译。下载交叉编译器安装完毕后,对ARM汇编代码进行编译。

arm-linux-gcc main.s -o main -nostdlib

编译选项“-nostdlib”表示不使用任何运行时库文件,编译生成的可执行文件main只能在ARM体系结构的系统上运行。

二、编译安装qemu模拟器

为了x86的Linux系统内运行ARM体系结构的可执行程序,需要安装qemu模拟器。

首先下载qemu源码,然后保证系统已经安装了flex和bison。

编译安装qemu。

./configure --prefix=/usr
sudo make && make install

然后使用qemu的ARM模拟器执行ARM程序。

qemu ./main

三、编译安装arm-gdb

为了调试ARM程序,需要使用gdb的源码编译生成arm-gdb。

首先下载gdb源代码,编译安装。

./configure --target=arm-linux --prefix=/usr/local
sudo make && make install

为了和系统的gdb避免冲突,我们将gdb的安装目录安装到/usr/local,然后建立软链接即可。

ln -s /usr/local/gdb/gdb /usr/bin/arm-gdb

之后便可以使用arm-gdb命令调试ARM程序了。

四、调试ARM程序

首先使用qemu打开远程调试端口。

qemu-arm -g 1024 ./main

然后导出环境变量QEMU_GDB。

export QEMU_GDB=/usr/local/gdb

最后,进入gdb调试。

arm-gdb ./main

进入arm-gdb后,首先连接远程调试端口。

(gdb) target remote localhost:1024

然后使用gdb常用的调试命令调试代码即可。

(gdb) disassemble           // 查看反汇编
(gdb) x /8xw 0x0000808e     // 查看内存
(gdb) info register         // 查看寄存器
(gdb) continue              // 继续执行
(gdb) stepi                 // 汇编级逐过程
(gdb) nexti                 // 汇编级逐语句

参考资料

  • http://blog.sina.com.cn/s/blog_59fd92c40100h4v2.html
  • http://wenku.baidu.com/link?url=g8nb4PdsjaS4LLg6bDO3fo8LZjSVOFvglIi1b6OLgYbl_1Nav8_0QuDiWY4gTCByklxriyo-6s7s_JCErU6_RNcAP2FtB1FMpax1ATnUZn3

ARM汇编指令调试方法相关推荐

  1. ida pro 反汇编 Android so 库后修改 arm 汇编指令的方法总结

    1 前言 最近博主在学习Android逆向的时候,参照吾爱破解论坛的<教我兄弟学Android逆向系列课程>学习的时候,学到第8章<教我兄弟学Android逆向08 IDA爆破签名验 ...

  2. ARM 汇编指令 MOV32用法

    前言 移植基于ARM平台的RTOS时,需要掌握一些基本的汇编指令,只有熟悉了这些ARM 的汇编指令,才能真正的掌握RTOS的移植方法 MOV32 指令,字面意思是 MOVE 一个 32位 值的意思,具 ...

  3. 嵌入式工程师到底要不要学习ARM汇编指令?arm学习文章汇总

    嵌入式工程师到底要不要学习ARM汇编指令? 网上搜索这个问题,答案很多,大部分的建议是不要学汇编,只要学C语言. 而一口君作为一个十几年经验的驱动工程师,个人认为,汇编语言还是需要掌握的,想要搞精.搞 ...

  4. 常用的ARM汇编指令总结

    第一次写博客,请各路大神多多关照. 本人从事软件开发相关的工作,平时主要用c语言撸代码,前段时间因工作需要,接触到了ARM架构下的汇编指令,之前学过51单片机的汇编指令,早已经还给老师了,且ARM汇编 ...

  5. arm汇编指令详细整理及实例详解

    目录 一.简介 二.ARM 汇编指令说明 2.1 32位数据操作指令 2.2 32位存储器数据传送指令 2.3 32位转移指令 2.4 其它32位指令 三.实例讲解 3.1 MRS 3.2 MSR 3 ...

  6. 1.15.ARM汇编指令3之逻辑指令

    ARM汇编指令之逻辑指令:and & orr & eor & bic * and 逻辑与操作指令,将operand2的值与寄存器Rn的值按位逻辑与操作,结果保存到Rd中. 指令 ...

  7. arm汇编指令——分析问题的利器

    文章目录 arm汇编指令为什么重要 1. 主导问题 2. arm汇编指令分类介绍 通用寄存器 状态寄存器 数据转移指令 寻址格式 运算指令 比较指令 跳转指令 3. 反汇编接口 4. 反汇编分析举例 ...

  8. ARM汇编指令学习---基于启动文件startup.S分析

    本文主要是基于启动文件startup.s对ARM汇编指令进行学习分析. 以 . 开头一般是伪汇编/操作指令,形如: .section伪操作来定义一个段,形如: .section .testsectio ...

  9. ARM 汇编指令对应的机器码和条件码

    一.ARM 汇编指令对应的机器码 二.条件码

最新文章

  1. C#综合揭秘——Entity Framework 并发处理详解
  2. 打造一款高逼格的Vim神器
  3. Java.util包中常用的类
  4. Python 爬虫面试题 102 道
  5. mysql5.7.14安装版教程_MySQL5.7.14下载安装图文教程及MySQL数据库语句入门大全
  6. C# 数据的加密解密
  7. 每天学一点flash(76)百度MP3音乐APi接口使用
  8. Chrome浏览器快速获取静态控件的XPATH
  9. Windows server 2012体验之活动目录回收站
  10. 信息系统开发平台OpenExpressApp - ClickOnce智能部署
  11. 放弃微博,继续回来写月经
  12. 全球及中国创新药产业研发格局及应用价值分析报告2021-2027年
  13. 为Windows 7 Professional安装多语言包
  14. 初识app之产品需求分析文档设计
  15. php 解压 中文文件夹,如何把文件夹压缩为rar
  16. 羊了个羊, 听说这游戏很难
  17. maven 打包跳过单元测试
  18. 落地,请开手机李小晚【转】
  19. 校园 爆料 开怀一笑
  20. C++常见错误一大于小于

热门文章

  1. Java : 实体类不能序列化异常
  2. 在less中不能正常使用css3的calc属性的解决方法
  3. 关于System.FormatException异常
  4. 墨菲定律与 IndexOutOfBoundsException(数组越界异常)
  5. 异常:Invalid or unexpected token
  6. Angular / RxJs我应该何时退订`Subscription`
  7. Window+Java环境证书生成说明,pfx证书已经生成
  8. Linux命令:XZ解压tar.xz后缀的压缩包
  9. web 折线图大数据量拉取展示方案_对比多种微前端方案
  10. 案例-热点图(CSS3)