OPTEE Gprof(GNU profile)

news/2024/7/2 1:23:21 标签: OPTEE, TEE, Gprof, GNU profile

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

TEE.html" title=OPTEE>OPTEE调试技术汇总

目录

一、序言

Gprof%E4%BD%BF%E7%94%A8-toc" style="margin-left:0px;">二、Gprof使用

Gprof%E5%AE%9E%E7%8E%B0-toc" style="margin-left:0px;">三、Gprof实现

1、Call graph information

2、PC distribution over time


一、序言

        本文描述了如何使用gprof对TA进行概要分析。

        配置选项CFG_TA_GPROF_SUPPORT=y使OP-TEE能够从在用户模式下运行并使用-pg编译的TA收集分析信息。一旦收集到,分析数据将会被格式化为gmon.out格式,通过RPC发送给tee- supplant,因此它们可以保存到磁盘,稍后由标准gprof工具进行处理和显示。

Gprof%E4%BD%BF%E7%94%A8">二、Gprof使用

        使用CFG_TA_GPROF_SUPPORT=y构建OP-TEE OS。还可以设置CFG_ULIBS_MCOUNT=y来检测optee_os中包含的用户TA库(例如libutee和libutils)。

        使用-pg构建用户TA,例如enable: CFG_TA_MCOUNT=y来检测整个用户TA。注意,instrumented ta有一个更大的.bss段。32位TA的内存开销是.text大小的1.36倍,64位TA的内存开销是.text大小的1.77倍(详细信息请参阅TA链接器脚本:TA /arch/arm/ TA .ld. s)。

        正常运行应用程序。当最后一个会话退出时,tee- supplicant将分析数据写入/tmp/gmon-<ta_uuid>.out。如果该文件已经存在,则附加一个数字,如:gmon-<ta_uuid>.1.out。

        在TA ELF文件上运行gprof,分析输出:gprof <ta_uuid>.elf gmon-<ta_uuid>.out。

Gprof%E5%AE%9E%E7%8E%B0">三、Gprof实现

        部分分析是在libutee中实现的。另一部分由伪ta (core/arch/arm/sta/gprof.c)在TEE内核中完成。收集两类数据:

1、Call graph information

        当使用-pg开关编译TA源文件时,编译器会在每个函数序言中生成额外的代码,以调用检测入口点(__gnu_mcount_nc或_mcount,具体取决于体系结构)。每次调用一个instrumented的函数时,libutee记录一对程序计数器(一个是调用者,另一个是被调用者)以及调用图中这个特定弧线的次数。

2、PC distribution over time

        当一个instrumented的TA启动时,libutee调用伪TA为当前会话启动PC采样。采样数据由TEE核心直接写入用户空间缓冲区。

        每当TA执行中断时,TEE核心记录当前程序计数器的值,并建立程序位置的直方图(即,PC的每个值所花费的相对时间量)。gprof工具稍后将使用它来派生每个函数所花费的时间。假设采样率大致恒定,通过跟踪执行用户TA代码所花费的时间并将中断数除以总时间来计算采样率。

        记录调用图和采样数据的分析缓冲区分配在TA的.bss部分中。只有在检测TA时,链接器脚本才会保留一些空间。

参考:Gprof — OP-TEE documentation documentation


http://www.niftyadmin.cn/n/5049202.html

相关文章

StableAudio-大模型创作音乐的工具

音乐产业即将发生革命。 今天Stability AI&#xff0c;开源人工智能工具和模型之王&#xff0c;例如Stable DIffusion和StableLM&#xff0c;推出Stable Audio&#xff0c;其首款用于音乐和声音生成的人工智能产品。 音乐行业是出了名的难以进入。即使您有才华和动力&#x…

Redis类型(Type)与编码(Encoding)

本文已收录至GitHub&#xff0c;推荐阅读 &#x1f449; Java随想录 微信公众号&#xff1a;Java随想录 原创不易&#xff0c;注重版权。转载请注明原作者和原文链接 文章目录 redisObjectType与Encoding介绍字符串列表集合有序集合哈希表 Type与Encoding底层原理编码转换数据…

Python15题day11

⑥寻找列表中的最大值&#xff0c;最小值 lst [3, 6, 1, 8, 1, 9 , 2] max_value lst[0] for item in lst: if item > max_value: max_value item print(max_value) 1.参照上面的代码&#xff0c;写代码寻找列表的最小值 lst [3, 6, 1, 8, 1, 9, 2] min_value lst[0] …

基于transformer一步一步训练一个多标签文本分类的BERT模型

Bert(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练语言模型,由Google在2018年提出。Bert模型在自然语言处理领域取得了重大突破,被广泛应用于各种NLP任务,如文本分类、命名实体识别、问答系统等。 Bert模型的核心思想是通…

小黑跟中老黑和阿黄吃了烤蚕蛹知了,喝了阿黄带来的茅台,耳机又莫名其妙第丢了逐渐减少内耗的leetcode之旅:714. 买卖股票的最佳时机含手续费

小黑代码&#xff08;独立做出&#xff09; class Solution:def maxProfit(self, prices: List[int], fee: int) -> int:# 数组长度n len(prices)if n < 2:return 0# 动态规划变量buy -prices[0]sell 0for i in range(1, n):buy max(buy, sell-prices[i])sell max(…

数据结构之【动态数组】

1. 线性表 概念&#xff1a;线性表是n个具有相同特性的数据元素的有限序列。 常见的线性表有&#xff1a;数组、链表、栈、队列、字符串…… 特点&#xff1a; 保存在这个结构中的元素都是相同的数据类型。元素之间线性排列&#xff0c;元素之间在逻辑上是连续的。 线性表…

《学术小白学习之路》论文常见方法:Doc2vec-句向量模型实现

1. 数据 用于文献的摘要的相似度的计算 ## 导包 import pandas as pd import jieba import gensim from gensim.models import Doc2Vec from gensim.models.doc2vec import TaggedDocument再定义停用词典,用于分词,还可以自己定义一个分词词典 ## 读入数据 papers = pd.&l…

Java基础面试题精选:深入探讨哈希表、链表和接口等

目录 1.ArrayList和LinkedList有什么区别&#xff1f;&#x1f512; 2.ArrayList和Vector有什么区别&#xff1f;&#x1f512; 3.抽象类和普通类有什么区别&#xff1f;&#x1f512; 4.抽象类和接口有什么区别&#xff1f;&#x1f512; 5.HashMap和Hashtable有什么区别&…