硬汉嵌入式论坛

 找回密码
 立即注册
查看: 722|回复: 2
收起左侧

[功能实战] H7-TOOL通过SWD接口检索Flash或者RAM空间数值方法

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106692
QQ
发表于 2022-11-26 11:31:49 | 显示全部楼层 |阅读模式


引出问题:
比如我们想了解这种全局变量定义方式,常量的0x48494a4b4c4d4e4f的存储位置

image.png


解决办法:

可以做个如下方式的实现:

[Lua] 纯文本查看 复制代码
local ok
local bytes
local s
local i
local x
local y
local addr
local rec
local status

function printf(...)                   
    print(string.format(...))                   
end

beep()
status = 0
pg_init(0)

-- 根据需要设置检索的地址和范围,我们这里是检索的地址0x08000000的1MB空间
for i=0,1023,1 do
    ok,bytes = pg_read_mem(0x08000000+i*1024, 1024)
    rec = i
    if(ok == 1) then
    -- 查找字符,返回值x是起始位置,y是结束位置
     x, y = string.find(bytes,"\x4F\x4E\x4D\x4C\x4B\x4A\x49\x48")

      if(x ~= nil) then
       printf("找到了")
       status = 1
       printf("x=%d, y=%d", x, y)
       break
      end
    end
   
end

if(status == 1) then
  -- 最终的位置
  addr  = rec*1024 + x + 0x08000000 - 1

  ok,bytes = pg_read_mem(addr, y-x+1)  -- 读取字符

  printf("字符地址 = 0x%x", addr)
  print_hex(bytes)

else
  printf("没有找到对应字符")
end

 


效果:
image.png





回复

使用道具 举报

4

主题

129

回帖

146

积分

初级会员

积分
146
发表于 2022-11-26 21:49:32 | 显示全部楼层
如果固件的数据碰撞了怎么办?那检测出来的容量不就比实际的小了?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106692
QQ
 楼主| 发表于 2022-11-26 22:22:38 | 显示全部楼层
Dinor 发表于 2022-11-26 21:49
如果固件的数据碰撞了怎么办?那检测出来的容量不就比实际的小了?

string.find可以检测多次出现的情况。
这个是群友提的一个问题,这种情况下,全局变量值是存在什么位置。正好使用这个功能检测了下。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-30 04:17 , Processed in 0.224246 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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