OPTEE异常调用栈解析

news2024/11/13 23:54:16

安全之安全(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.coloradmin.cn/o/1013331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业级SpringBoot单体项目模板 —— 基础应用搭建

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;SpringBoot项目模板、工程、MyBatis-plus☀️每日 一言&#xff1a;你那么在意不喜欢你的人的言语&#xff0c;这对喜欢你的人来说很不公平 一、创建一个Maven项目 Maven的安装自己百度。 2.1 …

新能源汽车驱动电机的基本知识

学习目标:了解电机的基本知识。能力目标:培养学生搜集和整理相关资料的能力。素质目标:培养学生良好的职业素养。额定电店.在夫见定条件下电池工作的*于佳 电压知识准备术语和定义。 (1)驱动电机系统 通过有效的控制策略将动力蓄电池提供的直流电转化为交流实现电机的正转以及反…

在Linux上配置Spug自动化运维平台,实现公网远程访问

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

Keepalived 高可用(附带配置实例,联动Nginx和LVS)

Keepalived 一、Keepalived相关知识点概述1.1 单服务的风险&#xff08;单点故障问题&#xff09;1.2 一个合格的集群应该具备的特性1.3 VRRP虚拟路由冗余协议1.4 健康检查1.5 ”脑裂“现象 二、Keepalived2.1 Keepalived是什么&#xff1f;2.2 Keepalived体系主要模块及其作用…

机器学习技术(十)——决策树算法实操,基于运营商过往数据对用户离网情况进行预测

机器学习技术&#xff08;十&#xff09;——决策树算法实操 文章目录 机器学习技术&#xff08;十&#xff09;——决策树算法实操一、引言二、数据集介绍三、导入相关依赖库四、读取并查看数据1、读取数据2、查看数据 五、数据预处理1、选择数据2、数据转码 六、建模与参数优…

成都收录《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作

成都收录《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作已收录至成都

类和对象三大特性之多态

全文目录 虚函数虚函数的重写接口继承和实现继承重载、重写&#xff08;覆盖&#xff09;、隐藏&#xff08;重定义&#xff09;C11 override 和 final抽象类 多态的概念多态原理虚函数表 单继承和多继承的虚函数表打印虚函数表单继承的虚函数表多继承的虚函数表 常见面试问答题…

Cinema 4D 2024 for Mac:创造无限可能的3D艺术之旅

如果你追求极致的3D图形设计和动画制作&#xff0c;那么Autodesk的Cinema 4D 2024软件绝对是你不容错过的选择。尤其是对于Mac用户&#xff0c;这个强大的工具将提供给你无与伦比的工作效率和创造力。 在Cinema 4D 2024中&#xff0c;你可以通过直观的界面和高效的工作流程&am…

大数据之-kafka学习笔记

Kafka Kafka 是一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域。 Kafka可以用作Flink应用程序的数据源。Flink可以轻松地从一个或多个Kafka主题中消费数据流。这意味着您可以使用Kafka来捕获和传输…

数字人直播助力商家降本增效,AI数字人主播成为商家直播新选择

随着人工智能技术、云计算、5G移动通信等技术的发展&#xff0c;AI数字人行业不断加快各种应用场景落地。数智创研院的《2022数智人分析洞察报告》显示&#xff0c;中国AI数智人市场规模呈现高速增长趋势&#xff0c;预计到2026年将达102.4亿元。 尤其是在直播领域&#xff0c…

arkworks工具栈概览

1. 引言 arkworks定位为zkSNARK编程的Rust生态。其开源代码见&#xff1a; https://github.com/arkworks-rs/ arkworks目前已广泛用于大量项目中&#xff0c;如&#xff1a;Aleo、anoma、celo、Espresso、Findora、Manta、Mina、Nimiq、penumbra等等。 参与arkworks开源实现…

黑客必备工具Kali Linux,安装与使用教程全包含,从入门到精通,全网最详细全面的Kali Linux教程

Kali Linux是一个高级渗透测试和安全审计Linux发行版&#xff0c;目前可以说是网络安全人员的专用系统。 Kali Linux功能非常强大&#xff0c;能够进行信息取证、渗透测试、攻击WPA / WPA2保护的无线网络、离线破解哈希密码、将android、Java、C编写的程序反编译成代码等等&am…

CRM与chatGPT结合的效果

2023年ChatGPT是当之无愧的行业热词&#xff0c;从诞生到爆红短短5天&#xff0c;注册用户数就超过100万&#xff0c;截止到2023年1月底已经有超过1亿用户。在这样的背景下&#xff0c;Zoho CRM系统在业内较早推出集成ChatGPT的相关功能&#xff0c;接下来我们就来分享CRM接入C…

【Unity】ShaderGraph应用(浮动气泡)

【Unity】ShaderGraph应用(浮动气泡) 实现效果 一、实现的方法 1.使用节点介绍 Position&#xff1a;获取模型的顶点坐标 Simple Noise:简单的噪声&#xff0c;用于计算顶点抖动 Fresnel Effect&#xff1a;菲涅耳效应&#xff0c;用于实现气泡效果 计算用节点 Add&…

大模型赛道如何实现华丽的弯道超车

导读&#xff1a;Alluxio作为一款强大的分布式统一大数据虚拟文件系统&#xff0c;已经在众多领域展现出了其卓越的应用价值&#xff0c;并且为AI/ML训练赋能提供了一个全新的解决方案。 在人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;领域&#x…

基于STM32的简化版智能手表

一、前言 本文的OLED多级菜单UI为一个综合性的STM32小项目&#xff0c;使用多传感器与OLED显示屏实现智能终端的效果。项目中的多级菜单UI使用了较为常见的结构体索引法去实现功能与功能之间的来回切换&#xff0c;搭配DHT11&#xff0c;RTC&#xff0c;LED&#xff0c;KEY等器…

752. 打开转盘锁

链接&#xff1a; 752. 打开转盘锁 题解&#xff1a; class Solution { public:int openLock(vector<string>& deadends, string target) {std::unordered_set<std::string> table(deadends.begin(), deadends.end());if (table.find("0000") ! t…

怎么把ppt压缩到10m以内?一分钟学会ppt压缩

在现代办公中&#xff0c;PowerPoint演示文稿已经成为我们日常工作中不可或缺的一部分&#xff0c;然而&#xff0c;随着我们对演示文稿的要求越来越高&#xff0c;其文件大小也往往变得越来越大。有时候&#xff0c;一个简单的PPT文件就可能占用数十兆甚至上百兆的空间&#x…

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

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