0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用静态呼叫流浏览器进行软件故障排除

星星科技指导员 来源:嵌入式计算设计 作者:Hari Nagalla 2022-06-21 09:55 次阅读

由于具有射频连接和微控制器内核的低成本集成片上系统设备的进步,物联网IoT) 设备呈指数级增长。

其中许多设备主要基于 Arm® Cortex®-M 架构。随着硬件的进步,嵌入式软件在跟上新的连接协议、协议栈和框架方面发挥着重要作用。

然而,连接设备的激增给嵌入式软件工程师带来了挑战,尤其是同时在多个设备和框架上工作的应用和维护工程师。

学习新设备软件、框架和协议栈的工作方式可能非常耗时,并且会限制工程师快速解决问题的能力。设计文档和内嵌源代码注释会有所帮助,但它们可能不容易访问,并且可能无法提供代码工作原理的完整画面。

在这些情况下,工程师依靠他们的独创性、足智多谋和使用集成开发环境 (IDE) 浏览源代码。虽然这有助于理解软件代码流,但这是一个耗时且乏味的过程,但有更好的方法。

在本文中,我将介绍一种使用现有工具链实用程序来生成软件的静态函数调用层次结构并更快更好地理解软件流程的新颖方法。

常见的函数调用跟踪类型

您可以使用函数调用跟踪来了解代码流或识别错误。比较成功和失败场景之间的程序流程(通过函数调用跟踪)可以帮助您快速识别有问题的代码区域以进行进一步检查。

函数调用跟踪补充了基于 IDE 的源代码浏览,以更好地了解整个软件实现,并且可以分为两种常见的类别:

运行时函数调用跟踪。这是一个侵入性过程,需要检测源代码。像 GNU Compiler Collection 这样的工具链提供了放置函数调用的工具,这需要重建代码以重新生成新的二进制文件,但会导致额外的代码大小和更长的执行时间。对于缺乏内存的资源受限物联网设备,运行时函数调用跟踪可能不是一个可行的选择。另外,您无法保证插桩代码的行为与未插桩代码的行为相同。

静态函数调用。对于基于只读存储器 (ROM) 的设备,检测不是一个可行的选择。尽管您可以简单地使用 Eclipse 或 Source Insight 等 IDE 浏览源代码以了解软件实现,但这是一个乏味的过程。一些 IDE(通常是昂贵的商业版本)可以派生静态函数调用图。这些静态函数调用浏览器通常范围有限,如果源代码中有条件编译,则可能无法提供整个调用流程的准确画面。

但是,可以从反映实际二进制代码的二进制可执行和可链接格式 (ELF) 文件生成静态调用流浏览器。

使用静态呼叫流浏览器更快地修复软件

让我们使用设备的 ELF 二进制图像来生成函数调用参考详细信息。如图 1 所示,其想法是获取 ELF 二进制文件并将其传递给各种代码生成工具,例如 TI 的目标文件显示 (armofd) 和反汇编程序 (armdis),以生成函数列表和调用引用数据库。生成数据库后,在简单的树形浏览器中显示调用层次结构和流程,以查看函数调用引用。这些静态调用流程图还可以通过将运行时 ROM 代码消息日志覆盖在静态函数树的顶部来帮助调试——这种组合将提供对运行时代码流的洞察并帮助您隔离问题。

pYYBAGKxJT6AYoODAAEz7T7ZjmQ760.png

图 1:ELF 文件格式

二进制文件 (ELF) 分析

ELF 文件包含程序头、节头以及代码和数据节。工具链提供了各种工具来检查和以可读格式显示 ELF 二进制文件内容。在 TI,我们使用 armofd 和 armdis 等实用程序名称来获取 Arm 反汇编中的功能详细信息和完整的程序编码。

pYYBAGKxJUWAVo_jAADO_dMRhsI255.png

图2:静态函数分析流程

解析引擎遍历反汇编代码并通过带有链接的分支 (BL) 和带有链接和交换的分支 (BLX) 指令检查函数调用,找到每个函数的所有调用函数,并填充函数数据库。数据库本身排列为 Adelson-Velsky 和 Landis 自平衡搜索树,用于快速搜索和浏览。

编译器优化可能会通过直接分支到被调用函数来扭曲某些函数调用。这些函数没有任何堆栈分配,因此解析引擎需要足够智能以检测这些编译器优化。

功能浏览器

称为 Java 框架 (JFrames) 的简单图形用户界面 (GUI) 界面选择感兴趣的函数以进行函数调用浏览。选择一个函数会显示两个框架,一个用于“被调用者/被调用函数”,另一个用于“调用自”函数。这些框架显示了具有进一步节点扩展的分层树结构,如图 3、4、5 和 6 所示。

浏览器图形用户界面

函数列表显示所有可用函数,使您能够选择感兴趣的函数以浏览参考文献。

poYBAGKxJUyAYFzmAAGXx-TUVYQ613.png

图 3:功能列表显示

可以进一步向下导航树以查看函数调用的可能性。

pYYBAGKxJVSAJmMpAAHSvFCubkc321.png

图 4:被调用的函数引用

pYYBAGKxJVyAaI2HAACzLirU1Uo364.png

图 5:从引用中调用

pYYBAGKxJWOAOttZAAIXqLawwTg260.png

图 6:功能列表 GUI

简化软件

通过使用这种方法从二进制图像中导出静态调用流程图,您现在可以更好地了解软件功能流程并补充您的源代码浏览,从而更深入地了解软件实现。最重要的是,这种方法可以加快流程并使故障排除软件更简单。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9091

    浏览量

    367474
  • ROM
    ROM
    +关注

    关注

    4

    文章

    572

    浏览量

    85748
  • 物联网
    +关注

    关注

    2909

    文章

    44608

    浏览量

    373066
收藏 人收藏

    评论

    相关推荐

    讯飞星火浏览器插件全新升级

    时刻陪伴,星火插件让你的浏览器变成真正的生产力工具。
    的头像 发表于 12-25 09:48 113次阅读

    Chrome浏览器优化Android性能,骁龙8至尊版表现突出

    谷歌近日对Chrome浏览器的最新版本进行了重大更新,特别针对Android设备进行了性能优化,特别是对于搭载骁龙8至尊版处理的旗舰设备而言。 自Chrome M112版本以来,An
    的头像 发表于 12-13 14:44 209次阅读

    AWTK 最新动态:支持浏览器控件

    导读AWTK浏览器控件,基于webview项目实现,将浏览器嵌入到AWTK应用程序中,让开发者可以方便的集成在线帮助和调用地图等功能。awtk-widget-web-view是基于webview实现的AWTK浏览器控件,使得AW
    的头像 发表于 11-20 01:05 198次阅读
    AWTK 最新动态:支持<b class='flag-5'>浏览器</b>控件

    写一个Chrome浏览器插件

    一、什么是浏览器插件 浏览器插件是依附于浏览器,用来拓展网页能力的程序。插件具有监听浏览器事件、获取和修改网页元素、拦截网络请求、添加快捷菜单等功能。使用
    的头像 发表于 11-18 17:12 315次阅读
    写一个Chrome<b class='flag-5'>浏览器</b>插件

    跨域问题是由浏览器的同源策略造成的

    浏览器
    jf_62215197
    发布于 :2024年08月27日 07:51:42

    不只是前端,后端、产品和测试也需要了解的浏览器知识(二)

    过程中不断创新,推动产品性能、用户体验的提升,来实现业务的增长,创造可持续的价值 。 一、 业务系统呈现给用户的节点 当用户访问我们的业务系统时,浏览器和服务之间会进行一系列复杂的交互过程。
    的头像 发表于 08-12 14:32 341次阅读
    不只是前端,后端、产品和测试也需要了解的<b class='flag-5'>浏览器</b>知识(二)

    不只是前端,后端、产品和测试也需要了解的浏览器知识

    一、我们为什么要了解浏览器? 1. 对于前端开发者 1.浏览器是用户体验的第一线。我们需要了解浏览器的工作原理,才能有效地设计和实现用户界面,确保良好的用户体验。 2.好的产品需要考虑浏览器
    的头像 发表于 07-01 18:03 467次阅读
    不只是前端,后端、产品和测试也需要了解的<b class='flag-5'>浏览器</b>知识

    如何用python调用浏览器的视频?

    linda 我想用python调用浏览器的视频。 我使用cv2调用视频,但是失败了。 URL=\"http://192.168.4.1/face_stream\" cap = cv2.VideoCapture(URL) print(cap.isOpened()) 输出了
    发表于 06-26 08:15

    Opera浏览器引领潮流,全球首接端侧AI大模型

    昆仑万维旗下海外平台Opera宣布,其旗舰浏览器Opera One和游戏浏览器Opera GX将正式接入端侧AI大模型,成为全球首个实现这一突破的主流浏览器
    的头像 发表于 06-03 09:18 736次阅读

    微软Edge浏览器新增文本编辑功能:引入Compose和数字书写功能

    除此之外,Edge 浏览器也对 Windows Ink 的手写体验进行了优化提升。现在,用户可在浏览器地址栏、文本区及“contenteditable”属性的区域内使用数字书写功能。
    的头像 发表于 04-24 15:26 670次阅读

    Edge浏览器关闭Microsoft Rewards扩展原因揭晓

    据报道,近期德国等地的Microsoft Edge浏览器用户发现,安装或启动Microsoft Rewards扩展后,会出现“右上角扩展被Edge浏览器禁用以保障您的浏览器安全”的提醒窗口。
    的头像 发表于 04-10 09:55 813次阅读

    Mozilla Firefox浏览器推出Text Fragments功能,提升用户体验

    早在2020年,谷歌即在Chrome浏览器中推出了“Scroll to Text Fragments”功能,而Edge、Opera、Brave、Vivaldi以及苹果Safari等基于Chromium的浏览器也已支持这一便捷特性。
    的头像 发表于 04-08 10:21 618次阅读

    鸿蒙实战开发:【浏览器制作】

    使用[@ohos.systemparameter]接口和[Web组件]展示了一个浏览器的基本功能,展示网页,根据页面历史栈前进回退等。
    的头像 发表于 03-19 17:47 588次阅读
    鸿蒙实战开发:【<b class='flag-5'>浏览器</b>制作】

    如何通过浏览器访问Web页面进行固件更新的方法?

    如果电脑没有安装 TIA PORTAL 软件,但是 CPU 之前激活了 Web 服务功能,可以通过电脑联网 CPU,然后打开浏览器浏览到 CPU 的方式
    的头像 发表于 02-25 14:51 1566次阅读

    昆仑万维旗下Opera将推出全球首款非WebKit内核的iOS浏览器

    近日,昆仑万维旗下的国际知名浏览器品牌Opera宣布,将针对欧洲的iPhone和iPad用户推出一款全新的AI浏览器——Opera One。这款浏览器最大的亮点在于,它基于Opera自研的引擎,而非通常的WebKit内核,这在全
    的头像 发表于 02-06 16:40 5731次阅读