来源:阿莫论坛,作者:ilovepp微信公众号:芯片之家(ID:chiphome-dy)

首先你要有一个bin文件(bin文件的获取方法不在此展开介绍,今后有机会可以专门开一个贴聊一聊)。本次实验用到的bin文件  stm32_xwrtos.bin.zip (6 KB) 是用ST官方CMSIS和外设库编译的跑在stm32f103c8t6上的bin文件,比较具有代表性。

烧录文件下载:

链接:https://pan.baidu.com/s/1YiMkyqbdPxGOI_vwGtOlJw  提取码:yi56

工具准备:

安装开源跨平台逆向神器r2 https://github.com/radareorg/radare2 ,r2可运行在Windows、Linux、Mac等所有主流操作系统上(r2有多牛逼不在此展开介绍,今后有机会可以专门开一个贴聊一聊)。实验步骤:
1)输入r2 -a arm -b 16 -m 0x08000000 stm32_xwrtos.bin 进入r2的控制台后,输入e asm.cpu=cortex。这一步是告诉r2以0x08000000为基址加载stm32_xwrtos.bin文件,并设置指令集为cortex系列的thumb。

2)输入aaaa,运行自动化分析。

3)输入pxw 268 @0x08000000 以小端四字节形式打印从0x08000000开始的268(268对应中断向量表大小)个字节,同时打开ST官方的启动文件startup_stm32f10x_md.s并找到.isr_vector段进行对照。

4)接着上一步,输入fs notes,创建并切换到一个名为notes(可以是任意其他名字)的符号记事本;按照f flag=address的形式,对照.isr_vector段,向符号记事本中录入感兴趣的符号地址对应关系。注意如果address是函数地址则需要减1(因为thumb指令的要求,具体原因此处不展开);最后输入af @flag形式的命令强制进行函数分析。

5) 输入pdf @Reset_Handler,对Reset_Handler函数进行反汇编

输入 VV 切换到流程图视图

通过阅读汇编代码,可以得到以下信息:
1.  data段的地址区间为0x20000000-0x20000028 bss段的地址区间为0x20000028-0x2000043C

2.  Reset_Handler用0x08002cbc开始的0x28字节初始化data段,用0填充bss段

3. 调用fcn.08001cc8函数4. 调用fcn.08001734函数6)输入pdf @fcn.08001cc8进行反汇编

发现对外设寄存器地址0x40021000的引用

通过查询数据手册,可判断fcn.08001cc8函数应为系统初始化化函数SystemInit(),它初始化了时钟
7)根据经验判断fcn.0800173函数即为main函数

本篇作为系列第一篇文章,主要作用是带大家熟悉和习惯r2的基本使用,以及对逆向有个感性认识。下一篇计划在逆向的基础上介绍stm32上的栈溢出漏洞的挖掘与利用。

再次感谢ilovepp兄分享的精彩文章!

请戳右下角,给我一点在看!

arm平台下的反汇编pdf_stm32逆向与安全科普,bin文件逆向反汇编相关推荐

  1. stm32逆向与安全科普,bin文件逆向反汇编

    来源:阿莫论坛,作者:ilovepp 微信公众号:芯片之家(ID:chiphome-dy) 首先你要有一个bin文件(bin文件的获取方法不在此展开介绍,今后有机会可以专门开一个贴聊一聊).本次实验用 ...

  2. 将Linux系统下交叉编译的依赖库推到ARM平台下无法建立以来关系解决

    问题:平常把opencv库使用源码交叉编译好之后,从windows推到飞机里发现,该库的依赖关系都没有了,导致程序运行的时候报该库大小有问题 解决办法: 1.将linux下的库推到ARM平台中的一个文 ...

  3. ARM平台下无线网卡的配置

    ARM平台下无线网卡的配置 前言 看了下上次博客时间,大概是毕业后到目前两个多月了没有更新博客,突然发现自己正在变得越来越懒,这可不是一个好的征兆.除过找工作一个礼拜的时间,算起来已经工作了快2个月了 ...

  4. Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析(完)...

    原文 http://www.cnblogs.com/mayswind/archive/2013/04/01/2991271.html [题外话] 这是这个系列的最后一篇文章了,为了不让自己觉得少点什么 ...

  5. Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析(一)...

    [题外话] 这是2010年参加比赛时候做的研究,当时为了实现对Word.Excel.PowerPoint文件文字内容的抽取研究了很久,由于Java有POI库,可以轻松的抽取各种Office文档,而.N ...

  6. Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析

    转载http://www.cnblogs.com/mayswind/archive/2013/03/17/2962205.html [题外话] 这是2010年参加比赛时候做的研究,当时为了实现对Wor ...

  7. ARM平台下独占访问指令LDREX和STREX的原理与使用详解

    为了实现线程间同步,一般都要在执行关键代码段之前加互斥(Mutex)锁,且在执行完关键代码段之后解锁.为了实现所谓的互斥锁的概念,一般都需要所在平台提供支持. 在计算机领域里,如果要在多线程的情况下要 ...

  8. 4G通信模块在ARM平台下的应用

    4G模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一.随着4G的普及,许多新兴市场对4G通信模块的需求都在日益扩大,那么在ARM平台的嵌入式设备上如何快速的应用4G模块呢? 4G通信模块 ...

  9. 4g通信模块怎么连接sim卡_4G通信模块在ARM平台下的应用

    4G模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一.随着4G的普及,许多新兴市场对4G通信模块的需求都在日益扩大,那么在ARM平台的嵌入式设备上如何快速的应用4G模块呢? 4G通信模块 ...

  10. X86与ARM平台下的参数传递机制

    X86与ARM平台区别参考:一文看懂arm架构和x86架构有什么区别_bleauchat的博客-CSDN博客_arm x86 1. X86下的参数传递 参数传递: (1)32位程序使用栈传递. (2) ...

最新文章

  1. 字典学习(Dictionary Learning)
  2. Liferay 集群 (fail-over)
  3. OOP设计模式[JAVA]——03职责链模式
  4. Modelsim do文件的自动化仿真及模板
  5. 创新实训个人记录 : 个人工作总结
  6. java equals重写原则_java中为何重写equals时必须重写hashCode方法详解
  7. Java的未来项目:巴拿马,织布机,琥珀和瓦尔哈拉
  8. Oracle:Authid Current_User使用
  9. jq ajax异步上传文件,jQuery Ajax上传文件
  10. Linux版的led显示屏控制软件,中航Led显示屏控制软件下载
  11. 软件维护集成价格估算
  12. 关于iReport中纸张的大小 换算
  13. Ubuntu 16.04+1080Ti机器学习基本环境配置【转】
  14. 【vue作业】vue实现海贼王网页介绍--动漫网站设计
  15. java unbox_java base-05-Box UnBox 自动装拆箱
  16. 时尚pr标题模板,简约故障风格pr文字模板
  17. 物联网到底为什么这么火?
  18. gre 填空13-30
  19. 如何选择适合自己数据的统计检验方法
  20. 为什么PHICH配置信息和下行带宽dl-bandwith必须在PBCH MIB上广播

热门文章

  1. 平凡而又神奇的贝叶斯方法(转)
  2. 从数据治理、数据资产管理,到数据中台的落地实战!
  3. 2050: 技术未必会使我们摆脱愚昧,有时正相反(上)
  4. html桌面程序实例spark,【01】Spark 简单实例
  5. 谷歌android q 安装,谷歌修复了Pixel智能机安装Android Q Beta 4后循环重启的bug
  6. 【路径规划】基于matlab遗传结合模拟退火算法仓库拣货小车最优路径规划【含Matlab源码 649期】
  7. 【TWVRP】基于matlab粒子群算法求解带时间窗的车辆路径规划问题【含Matlab源码 334期】
  8. 【VRP】基于matlab遗传算法求解单中心的车辆路径规划问题【含Matlab源码 059期】
  9. lucky前面加a还是an_加方法 || 让孩子赶超学霸!这份小学英语知识精编,千万不能错过啦!...
  10. python函数式编程模式_Python 函数式编程