OPTEE异常调用栈解析

安全之安全(security²)博客目录导读

目录

一、OPTEE标准的异常调用栈格式

二、OPTEE异常调用栈解析脚本

三、如何执行解析命令

四、OPTEE异常调用栈解析结果


序言:当OPTEE发生异常时,安全控制台会输出dump信息,虽然有了Call stack,但是仅有函数的地址,并不知道确切的调用关系,尚且不能精准定位问题。因此就需要本节的知识对异常调用栈进行精确解析。

一、OPTEE标准的异常调用栈格式

        当OP-TEE遇到严重的错误情况时,它将诊断信息打印到安全控制台。如果CFG_UNWIND=y(默认启用),则消息包含一个调用栈。

        以下错误将触发dump:

        1)在TEE内核(内核模式)或TA(用户模式)中的数据或预取中止异常;

        2)当用户模式TA发生panic时,无论是通过直接调用TEE_Panic()还是由于TEE Core Internal API检测到的某些错误,

        3)当TEE core检测到致命错误并决定挂起系统时,因为没有办法安全地进行(core panic)。

        这些信息看起来略有不同,取决于:

        1)错误是异常还是panic,

        2)异常发生时的异常/特权级别(如果用户模式TA正在运行,则为PL0/EL0,如果是TEE core,则为PL1/EL1);

        3)TEE和TA是32位还是64位,

        4)异常的确切类型(数据或预取中止、translation fault、读写权限错误、对齐错误等)。

        下面是在32位TEE内核(QEMU)上运行的32位可信应用程序中的一个panic示例:

        上面的dump是由TA在输入一个不可恢复的错误时触发的,该错误最终导致TEE_Panic(0)调用。从dump中可以看出,虽然有了Call stack,但是仅有函数的地址,并不知道确切的调用关系,尚且不能精准定位问题,也就是序言里提到的问题。

二、OPTEE异常调用栈解析脚本

        OP-TEE提供了一个名为symbolize.py的脚本,以促进对此类问题的分析。它位于script /symbolize.py中的OP-TEE OS源代码树中,也被复制到TA开发工具包中。每当遇到报告严重错误并包含“Call stack:”行的错误消息时,都可以使用该脚本。它应该在主机(host)系统(构建环境)上运行,而不是在目标(target)系统上运行。以qemu_v8环境举例,也就是说在执行make -f qemu_v8.mk run-only命令的主机上运行该脚本。

        symbolize.py从stdin读取其输入,并将扩展的调试信息写入stdout。-d(目录)选项告诉脚本在哪里查找一个或多个ELF文件(<uuid>.stripped.elf)或tee.elf (TEE core)。详细信息请参考symbolize.py --help。

三、如何执行解析命令

1、直接将异常dump作为stdin输入

        1)先执行./optee_os/scripts/symbolize.py -d ./optee_examples/*/ta

        2)然后将异常dump信息拷贝至执行脚本的控制台

        3)执行完后可以看到实际的调用栈解析,Ctrl+D退出脚本

2、将异常dump保存为.txt文件,然后输入

        1)将异常dump保存为dump.txt,假如和symbolize.py为同一个目录

        2)直接执行cat dump.txt | ./optee_os/scripts/symbolize.py -d ./optee_examples/*/ta

        3)实际的调用栈解析直接打印,并自动退出脚本

四、OPTEE异常调用栈解析结果

        第三节中的两种方式可自由选择,不管使用哪一种,都可以输出实际的调用栈解析。Python脚本使用GNU Binutils包中的几个工具来执行以下任务:

        1)将调用栈地址转换为函数名、文件名和行号。

        2)将中止地址转换为一个符号加上一些偏移量或一个ELF section加上一些偏移量。

        3)打印TA的每个内存区域中包含的ELF section的名称。

        我们可以很清楚地看到具体哪个文件的哪个函数的哪一行,精确定位问题,至此序言中的问题得到有效解决。

注意:要成功运行symbolize.py,还必须使工具链在PATH中可见(即,export PATH=<my-toolchain-path>/bin:$PATH)。

参考:Abort dumps / call stack — OP-TEE documentation documentation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/109701.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity每日一记】资源加载相关和检测相关

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

初识Mybatis(二)动态SQL、缓存和逆向工程

动态SQL Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能&#xff0c;它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。 &#xff08;比如多条件查询的设置&#xff0c;实现判空等&#xff09; 1、if 创建DynamicSQLMapper接口&#xff0c;DynamicSQL…

机器学习——boosting之XGBoost(未完)

划水一整天&#xff0c;模型看了仨&#xff01;不错&#xff0c;虽然现在在打哈欠&#xff0c;还是很想把XGBoost梳理梳理 先从名字开始 XGBoost&#xff0c;eXtreme Gradient Boosting: em。。。。不理解 书上说&#xff0c;XGBoost有很好的性能&#xff0c;在各大比赛中大放异…

python-xpath语法-爬取彼岸图4k高清动漫壁纸

安装 pip install lxml导入 from lxml import etreexpath使用路径表达式提取html文档中的元素或元素集&#xff0c;然后元素通过沿路径path或步steps来选取数据 XPath常用语法格式 表达式描述div选取div元素的所有子元素/div选取根元素divul//li选取ul元素下的所有li子元素…

【算法专题突破】滑动窗口 - 水果成篮(13)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;904. 水果成篮 - 力扣&#xff08;Leetcode&#xff09; 题目有很长一段话&#xff0c;但是我们读一遍题目可以提炼转化出题目的要求 &#xff1a; 其实就是找出一个最长…

数据中心液冷服务器详情说明

目录 前言 何为液冷服务器&#xff1f; 为什么需要液冷&#xff1f; 1.数据中心降低PUE的需求 2.政策导向 3.芯片热功率已经达到风冷散热极限 4.液冷比热远大于空气 液冷VS风冷&#xff0c;区别在哪&#xff1f; 1.液冷服务器跟风冷服务器的区别 2.液冷数据中心跟风冷…

Java“牵手”速卖通商品列表页数据采集+速卖通商品价格数据排序,速卖通API接口申请指南

速卖通是阿里巴巴旗下的面向国际市场打造的跨境电商平台&#xff0c;被称为国际版淘宝&#xff0c;速卖通面向海外买家客户&#xff0c;通过支付宝国际账户进行担保交易&#xff0c;并使用国际物流渠道运输发货&#xff0c;是全球第三大英文在线购物网站。 速卖通商品列表数据…

《论文阅读》通过动态融入常识知识来提高同理心对话的生成

《论文阅读》通过动态融入常识知识来提高同理心对话的生成 前言简介模型架构Contextual ProbingContextual Unification Workspace代码实现Knowledge-Aware Decoder实验结果前言 你是否也对于理解论文存在困惑? 你是否也像我之前搜索论文解读,得到只是中文翻译的解读后感到…

基于SSM的客户管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

【SpringMVC】之自定义注解

文章目录 一、Java注解1.1 简介1.2 分类1.2.1 JDK基本注解1.2.2 JDK元注解1.3 自定义注解 二、使用自定义注解2.1 **案例一&#xff08;获取类与方法上的注解值&#xff09;**2.2 **案例二&#xff08;获取类属性上的注解属性值&#xff09;**2.3 **案例三&#xff08;获取参数…

创建UI账号密码登录界面

头文件 #ifndef MYWND_H #define MYWND_H#include <QPushButton> #include <QMainWindow>class MyWnd : public QMainWindow {Q_OBJECTpublic:MyWnd(QWidget *parent nullptr);~MyWnd(); }; #endif // MYWND_H 源文件 #include "mywnd.h" #include &…

揭秘 ChunJun:如何实现 e2esession 日志隔离

本文将从 e2e 的基本介绍&#xff0c;e2e 的使用与扩展&#xff0c;session 日志隔离三个维度为大家带来 ChunJun e2e & session 日志隔离的分享。 大量具体代码和演示请看视频教程⬇️ 视频课程&#xff1a; https://www.bilibili.com/video/BV1ru411P7oZ/?spm_id_from3…