当前位置: 首页 > news >正文

OPTEE Gprof(GNU profile)

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

OPTEE调试技术汇总

目录

一、序言

二、Gprof使用

三、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使用

        使用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实现

        部分分析是在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.lryc.cn/news/177621.html

相关文章:

  • MySQL 事务的操作指南(事务篇 二)
  • Oracle 查询 SQL 语句
  • gin 基本使用
  • 8月最新修正版风车IM即时聊天通讯源码+搭建教程
  • NSDT孪生场景编辑器系统介绍
  • 3D WEB轻量化引擎HOOPS助力3D测量应用蓬勃发展:效率、精度显著提升
  • 【Orange Pi】Orange Pi5 Plus 安装记录
  • NLP 项目:维基百科文章爬虫和分类 - 语料库阅读器
  • 查看吾托帮88.47的docker里的tomcat日志
  • 衷心 祝愿
  • 表单中某一项点击添加和删除
  • 深信服安全GPT 2.0升级,开启安全运营“智能驾驶”旅程
  • 【C++】STL之list深度剖析及模拟实现
  • 解释器风格架构C# 代码
  • 第七天:gec6818开发板QT和Ubuntu中QT安装连接sqlite3数据库驱动环境保姆教程
  • 自制网页。
  • MySQL单表查询和多表查询
  • 蓝桥等考Python组别四级006
  • 第3章-指标体系与数据可视化-3.2-描述性统计分析与绘图
  • 更直观地学习 Git 命令
  • 在 Vue 项目中添加字典翻译工具(二)
  • RDMA Shared Receive Queue(四)
  • this关键字
  • 缓存雪崩、缓存击穿、缓存穿透
  • Bigemap如何查看历史影像
  • 如何离线安装和使用pymysql操作mysql数据库
  • Prometheus-监控Mysql进阶用法(1)(安装配置)
  • 网络安全(黑客技术)自学内容
  • linux centos7 安装mongodb7.0.1 及 mongosh2.0.1
  • c++ | makefile | 编译 | 链接库