前馈科技

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 614|回复: 0

openocd+gdb观察ARM内存或FLASH内容

[复制链接]

97

主题

97

帖子

539

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
539
发表于 2021-12-24 10:16:15 | 显示全部楼层 |阅读模式
本文以STM32F4为例说明如何通过openocd和gdb观察内存或Flash中的数据,首先说明一下openocd的原理:
openocd5.jpg
下面直奔主题:
第一步,启动openocd:命令为sudo openocd -f interface/stlink-v2.cfg -c "set WORKAREASIZE 0x2000" -f target/stm32f4x_stlink.cfg
openocd1.png
第二步,启动gdb:命令为arm-none-eabi-gdb
openocd2.png
第三步,将gdb与openocd的监听端口连接:命令为target extended-remote localhost:3333
openocd3.png
第四步,通过gdb命令读取Flash内容,gdb中查看内存使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下:
n、f、u是可选的参数。
n是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。
f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地址是指令地址,那么格式可以是i
u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4bytesu参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

<addr>
表示一个内存地址。
n/f/u
三个参数可以一起使用。
输出格式
一般来说,GDB会根据变量的类型输出变量的值。但你也可以自定义GDB的输出的格式。例如,你想输出一个整数的十六进制,或是二进制来查看这个整型变量的中的位的情况。要做到这样,你可以使用GDB的数据显示格式:
x 按十六进制格式显示变量。
d
按十进制格式显示变量。
u
按十六进制格式显示无符号整型。
o
按八进制格式显示变量。
t
按二进制格式显示变量。
a
按十六进制格式显示变量。
c
按字符格式显示变量。
f
按浮点数格式显示变量。

对于我们来说,需要的命令如下:x/16384xh 0x08000000
openocd4.png


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|计算机控制

GMT+8, 2024-4-26 22:41 , Processed in 0.053205 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表