由于具有射频连接和微控制器内核的低成本集成片上系统设备的进步,物联网 (iot) 设备呈指数级增长。
其中许多设备主要基于arm® cortex-m®架构。随着硬件的进步,嵌入式软件在跟上新的连接协议、协议栈和框架方面发挥着重要作用。
然而,连接设备的激增给嵌入式软件工程师带来了挑战,尤其是同时在多个设备和框架上工作的应用程序和维护工程师。
了解新设备软件、框架和协议栈的工作原理可能非常耗时,并且会限制工程师快速解决问题的能力。设计文档和内联源代码注释可能会有所帮助,但它们可能不容易访问,并且可能无法全面了解代码的工作原理。
在这些情况下,工程师依靠他们的独创性、足智多谋和使用集成开发环境 (ide) 的源代码浏览。虽然这在尝试理解软件代码流时有所帮助,但这是一个耗时且乏味的过程,并且有更好的方法。
在本文中,我将介绍一种使用现有工具链实用程序来生成软件的静态函数调用层次结构并更快更好地理解软件流的新方法。
函数调用跟踪的常见类型
可以使用函数调用跟踪来了解代码流或识别 bug。比较成功和失败方案之间的程序流(通过函数调用跟踪)可以帮助您快速识别代码中存在问题的区域,以便进一步检查。
函数调用跟踪补充了基于 ide 的源代码浏览,以更好地了解整个软件实现,并且可以分为两个常见类别:
运行时函数调用跟踪。这是一个侵入性的过程,需要检测源代码。像 gnu compiler collection 这样的工具链提供了放置函数调用的检测,这需要重建代码来重新生成新的二进制文件,但会导致额外的代码大小和更长的执行时间。对于缺少内存的资源受限的 iot 设备,运行时函数调用跟踪可能不是一个可行的选择。此外,您无法保证检测的代码的行为与未检测的代码相同。
静态函数调用。对于基于只读存储器 (rom) 的设备,检测不是一个可行的选择。尽管您可以简单地使用 eclipse 或 source insight 等 ide 浏览源代码以了解软件实现,但这是一个繁琐的过程。一些 ide(通常是昂贵的商业版本)可以派生静态函数调用图。这些静态函数调用浏览器通常范围有限,如果源代码中有条件编译,则可能无法提供整个调用流的准确图片。
但是,可以从二进制可执行和可链接格式 (elf) 文件生成静态调用流浏览器,该文件反映了实际的二进制代码。
使用静态呼叫流浏览器更快地修复软件
让我们使用设备的 elf 二进制映像来生成函数调用引用详细信息。如图 1 所示,其思路是获取 elf 二进制文件,并通过各种代码生成工具(如 ti 的目标文件显示 (armofd) 和拆装器 (armdis) )传递它,以生成函数列表和调用引用数据库。生成数据库后,在简单的树浏览器中显示调用层次结构和流,以查看函数调用引用。这些静态调用流图还可以通过将运行时 rom 代码消息日志覆盖在静态函数树的顶部来帮助调试 - 这种组合将提供对运行时代码流的洞察并帮助您隔离问题。
图 1:elf 文件格式
二进制文件 (elf) 分析
该elf文件包含一个程序头,节头,以及代码和数据节。工具链提供了各种工具来检查和以可读格式显示 elf 二进制文件内容。在 ti,我们使用 armofd 和 armdis 等实用程序名称来获取 arm 反汇编中的功能详细信息和完整的程序编码。
图2:静态函数分析的过程
解析引擎遍历反汇编代码,并通过带链接的分支 (bl) 和带链接和交换的分支 (blx) 指令检查函数调用,查找每个函数的所有调用函数,并填充函数数据库。数据库本身被安排为adelson-velsky和landis自平衡搜索树,以便快速搜索和浏览。
编译器优化可能会通过直接分支到被调用的函数来扭曲某些函数调用。这些函数没有任何堆栈分配,因此解析引擎需要足够智能才能检测这些编译器优化。
函数浏览器
称为 java 帧 (jframes) 的简单图形用户界面 (gui) 界面为函数调用浏览选择感兴趣的函数。选择一个函数将显示两个帧,一个用于“被调用方/被调用函数”,另一个用于“被调用自”函数。这些帧显示具有进一步节点扩展的分层树结构,如图 3、4、5 和 6 所示。
浏览器图形用户界面
函数列表显示所有可用函数,使您能够选择感兴趣的函数来浏览参考文献。
图 3:功能列表显示
可以在树中进一步向下导航以查看函数调用的可能性。
图 4:调用的函数引用
图 5:从引用调用
图 6:功能列表 gui
简化软件
通过使用此方法从二进制映像派生静态调用流程图,您现在可以更好地了解软件功能流,并补充源代码浏览,以更深入地了解软件实现。最重要的是,这种方法可以加快流程并使故障排除软件更简单。
锗二极管型号及参数 硅管和锗管有什么区别
广和通FM150-NA 5G模组通过北美运营商T-Mobile认证测试
MOSFET开关管在零压开关转换器内的工作原理及应用特性分析
LPCVD技术助力低应力氮化硅膜制备
PCBA加工中怎么才能防止PCB板弯板翘
如何使用静态呼叫流浏览器更快地对嵌入式设备软件进行故障排除
发光二极管光强可靠性研究
WT1800E系列功率分析仪的功能特点及应用
苹果新机iPhone 11在印度市场非常受欢迎
采用MAXQ2000 USB “拇指”评估套件进行设计
vivoX20王者荣耀周年庆限量版体验 从外到内都设计的十分精细和用心
图纸编辑器在PCB设计中的特点优势介绍
什么是相干光通信 相干光通信的应用
NI当选全球前25大最适合工作的跨国企业之一
测量光电二极管好坏的三种方式介绍
如何实现机器人商业化,路该怎样走
VR全景技术它的作用是什么
AMD x86核心SoC抢攻嵌入式应用市场
vivo Y78 开售,搭载天玑7020 采用 Imagination GPU IP
ChatGPT 是什么