GDB调试arm汇编程序-入门

程序生成步骤

转自:https://azeria-labs.com/writing-arm-assembly-part-1/
  • 写好汇编代码到helloworld.s
  • 编译文件(但是没有链接)

只编译不链接形成.o文件。里面包含了对各个函数的入口标记,描述,当程序要执行时还需要链接(link)
链接就是把多个.o文件链成一个可执行文件

as helloworld.s -o helloworld.o
  • 链接文件,形成可执行文件
ld helloworld.o -o helloworld

GDB调试

程序代码

.data
var1: .word 3
var2: .word 4

.text
.global _start

_start:
    ldr r0, adr_var1         @ load the memory address of var1 via label adr_var1 to R0
    ldr r1, adr_var2         @ load the memory address of var2 via label adr_var2 to R1
    ldr r2, [r0]             @ load the value (0x03) at memory address found in R0 to R2
    str r2, [r1, r2, LSL#2]  @ address mode: offset. Store the value found in R2 (0x03) to the memory address found in R1 with the offset R2 left-shifted by 2. Base register (R1) unmodified.
    str r2, [r1, r2, LSL#2]! @ address mode: pre-indexed. Store the value found in R2 (0x03) to the memory address found in R1 with the offset R2 left-shifted by 2. Base register modified: R1 = R1 + R2<<2
    ldr r3, [r1], r2, LSL#2  @ address mode: post-indexed. Load value at memory address found in R1 to the register R3. Then modifiy base register: R1 = R1 + R2<<2
    bkpt

adr_var1: .word var1
adr_var2: .word var2
  • 进入调试
gdb helloworld
  • 下断点。在_start函数下好断点
break _start
  • 运行。会执行到断点位置
run 或者 r
  • 向下执行3步
nexti 3
  • 查看下面的10条指令

x:十六进制,i:指令

x/10i $pc
  • 查看所有寄存器状态数据
info registers
或者: i r
  • 查看指定内存地址存储的数据

x:十六进制
w:word,字类型

x/w 0x0001009F
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 下图是2017年我的朋友圈最喜欢的照片,没有之一。如果你有耐心,不嫌弃我啰嗦,我想给你讲讲这张照片的故事。 (1)...
    静若无心阅读 4,078评论 4 17
  • 从2008年5月12日开始,此后每年的5月12日都有了特殊的意义,今年的今天也毫不例外,2016年5月12日——汶...
    左宜右有之阅读 304评论 0 0
  • 为喜欢的人,你做过哪些傻事呢? 年轻的时候,我们多多少少都会为喜欢的人做过一些傻事吧?...
    唐朝晓风阅读 154评论 0 0
  • 歌曲<<最炫民族风>> 老年人带来了全国广场舞运动,既让老年人锻炼了身体又丰富了平时的娱乐活动。 山城在全国人民的...
    老蒋689阅读 227评论 8 25
  • 了解人体结构 细胞—>构成—>组织—构成—>器官—>构成—>系统—>构成—>人体 最终还是由细胞——>决定——>人...
    kj康健阅读 499评论 0 0