指令流信息记录

news2024/11/17 3:32:10

刚开始看指令流信息,还不太熟悉各个指令流表示的含义,这里做个记录
下面是用perf对一个简单的编译后的C程序进行的追踪结果

主体信息

在这里插入图片描述
上面都是16进制信息,先不用管
可以观察到每条指令流都由四部分组成,以分号作为分割(注意中间第三部分的时候他有冒号,但是不是分割)
真正追踪的时候从trace on开始关注分许

  • Idx:指令索引,一般是按时间顺序进行索引排序,故由小到大;这里只追踪指令跳转,故不是连续的)
  • ID:事件标识符,先不用管(只关注后面的CID)
  • 第三部分较长,是对事件的描述(可以理解为冒号前面是标识符,后面是具体的描述)
    • I_ADDR_CTXT_L_64IS0 : Address & Context, Long, 64 bit, IS0.
      • I_ADDR_CTXT_L_64IS0: 事件标识符,用于表示特定类型的事件(在 CoreSight ETMV4I 追踪系统中,这个事件标识符可能代表 “Address & Context, Long, 64 bit, IS0”,即“地址和上下文,长格式,64位,IS0”)
      • Address & Context: 这个事件涉及到某个地址和上下文的信息
      • Long: 事件可能包含长格式的数据。
      • 64 bit: 数据的位数,表示这个事件涉及到64位的信息。
      • IS0: 可能表示与某种状态或配置相关的信息。
    • I_ATOM_F1 : Atom format 1
      Atom 格式 1 类型的事件,Atom格式通常用于表示一些微观的操作或原子事件。在这个上下文中,“I_ATOM_F1” 是事件的标识符,而 “Atom format 1” 描述了事件的类型。
      “Atom format 1” 具体表示什么,以及事件中包含的信息,需要查阅相关的 CoreSight ETMV4I 追踪系统的文档或规范。
    • I_TIMESTAMP : Timestamp
      件的描述,表明这是一个 “Timestamp” 类型的事件,与时间戳相关。后面事件记录中的具体信息,即表示时间戳的更新值
  • 第四部分是事件记录的具体信息
    • I_ADDR_CTXT_L_64IS0
      • Addr表示事件记录中的具体信息,表示事件涉及的地址
      • Ctxt: AArch64,EL0, NS;
        提供有关上下文的信息,表示上下文是AArch64架构,ELO模式(特权级别为0),非安全状态;
      • CID=0x000010b6
        CID即Contect ID,上下文信息.每个线程(Task)在执行时都有一个唯一的 Context ID,它用于在多任务环境中区分不同的执行上下文。
    • I_ATOM_F1
      • E:跳转(后面一条跟地址的话就是间接跳转,否则就是直接跳转,看objdump输出的信息去找怎么跳转的)
      • N:表示一个空操作(不跳转)
        (这里最好再看一下文档)
    • I_TIMESTAMP
      第四部分是Updated val ,表示时间戳的更新值,以便在后续的分析中了解事件之间的时间关系
	Idx:421; ID:12;	I_EXCEPT : Exception.;  Data Fault; Ret Addr Follows;
	Idx:423; ID:12;	I_ADDR_L_64IS0 : Address, Long, 64 bit, IS0.; Addr=0x0000007FA3F3D3D8; 
	Idx:433; ID:12;	I_ADDR_CTXT_L_64IS0 : Address & Context, Long, 64 bit, IS0.; Addr=0xFFFFFF8010082400; Ctxt: AArch64,EL1, NS; 
	Idx:443; ID:12;	I_TIMESTAMP : Timestamp.; Updated val = 0x74dbf2bc835f
	Idx:446; ID:12;	I_TRACE_ON : Trace On.
	Idx:448; ID:12;	I_ADDR_CTXT_L_64IS0 : Address & Context, Long, 64 bit, IS0.; Addr=0x0000007FA3F3D3D8; Ctxt: AArch64,EL0, NS; CID=0x000010b6; 
	Idx:462; ID:12;	I_ATOM_F1 : Atom format 1.; N


	Idx:870; ID:12;	I_ADDR_S_IS0 : Address, Short, IS0.; Addr=0x0000007FA3F3D1EC ~[0x1EC]

	Idx:1240; ID:12;	I_ADDR_MATCH : Exact Address Match., [0]; Addr=0x0000007FA3F4D810; 
  1. Idx:421; ID:12; I_EXCEPT : Exception.; Data Fault; Ret Addr Follows;
    在索引421处发生了一个异常事件。这是一个数据访问异常(Data Fault),并且后续会提供返回地址(Ret Addr Follows)
  2. Idx:423; ID:12; I_ADDR_L_64IS0 : Address, Long, 64 bit, IS0.; Addr=0x0000007FA3F3D3D8;
    事件类型为 “Address, Long, 64 bit, IS0”,即涉及64位长格式地址,上下文为 AArch64,IS0
    事件的具体信息为地址(Addr),其值为0x0000007FA3F3D3D8。
  3. Idx:433; ID:12; I_ADDR_CTXT_L_64IS0 : Address & Context, Long, 64 bit, IS0.; Addr=0xFFFFFF8010082400; Ctxt: AArch64,EL1, NS;
  4. Idx:446; ID:12; I_TRACE_ON : Trace On.
    在索引 446 处发生了一个事件,其事件类型为 “Trace On”,即追踪(Trace)被启用.
    追踪通常用于记录程序执行过程中的一些关键事件或指令流,以便进行性能分析、调试或其他分析任务。当追踪开启时,系统会开始记录相关的追踪信息,以供后续分析使用。
  5. Idx:870; ID:12; I_ADDR_S_IS0 : Address, Short, IS0.; Addr=0x0000007FA3F3D1EC ~[0x1EC]
    在索引 870 处发生了一个事件,其事件类型为 “Address, Short, IS0”,即涉及短格式地址,上下文为 IS0;Addr是具体的地址信息,这是一个短格式的十六进制值; ~[0x1EC]: 附加的信息,可能是与地址相关的进一步描述,例如相对偏移等。
    这种信息通常用于追踪程序的执行路径或者发现在某个特定地址发生的事件。
  6. Idx:1240; ID:12; I_ADDR_MATCH : Exact Address Match., [0]; Addr=0x0000007FA3F4D810;
    I_ADDR_MATCH : 事件的标识符,表示这是一个关于地址匹配的事件
    Exact Address Match., [0] : 事件的描述,指示这是一个精确地址匹配事件,表示某个特定的地址与预定义的地址完全匹配。而 “[0]” 则可能表示这是匹配的第一个地址
	Idx:1467; ID:12;	I_ATOM_F1 : Atom format 1.; N
	Idx:1468; ID:12;	I_ATOM_F2 : Atom format 2.; NE
  • Atom Format 1 通常用于记录单个指令的微观层面事件。
    它可能包含有关指令执行、访存和其他执行流信息的详细数据。
    “N” 标记,可能表示某个时刻没有实际的操作发生,或者表示一个空操作。
  • Atom Format 2 通常用于记录特殊条件或事件,例如异常、中断或其他与指令执行相关的非正常情况。
    “NE” 标记,可能表示某个特定的非预期条件或事件,“NE” 可能表示 “Not Equal”,表示某种不相等的情况。

首部信息

在这里插入图片描述
这是 perf.data 文件中的一部分,其中包含关于性能计数器(perf events)的信息

  • 0x1f8@perf.data [0x190]: event: 69
    表示一个 perf event,事件编号为 69,发生地址为 0x1f8,大小为 400 字节。
  • raw event: size 400 bytes
    表示原始事件数据的大小为 400 字节。
  • 0000: 45 00 00 00 00 00 90 01 0c 00 00 00 00 00 00 00
    表示原始事件数据的具体内容,以十六进制表示。

在这里插入图片描述
这是 perf.data 文件中的一部分,其中包含关于性能计数器(perf events)的信息,特别是关于 PERF_RECORD_ID_INDEX 类型的记录。

  • 第一行
    表示一个 PERF_RECORD_ID_INDEX 类型的记录,发生地址为 0x1f8,大小为 400 字节(0x190 十六进制表示的大小)。
    nr: 12 表示该记录中有12个 ID(标识符)条目
  • 后面是ID条目
    • id:id值
    • idx:索引
    • cpu:该ID所属的CPU序号
    • tid:线程ID

结尾信息

0x1a560@perf.data [0x8]: event: 68
.
. ... raw event: size 8 bytes
.  0000:  44 00 00 00 00 00 08 00                          D.......        

-1 -1 0x1a560 [0x8]: PERF_RECORD_FINISHED_ROUND: unhandled!

Aggregated stats: (excludes AUX area (e.g. instruction trace) decoded / synthesized events)
           TOTAL events:         28
            COMM events:          2  ( 7.1%)
            EXIT events:          1  ( 3.6%)
           MMAP2 events:          4  (14.3%)
             AUX events:          2  ( 7.1%)
    ITRACE_START events:          2  ( 7.1%)
          SWITCH events:          7  (25.0%)
            ATTR events:          2  ( 7.1%)
  FINISHED_ROUND events:          1  ( 3.6%)
        ID_INDEX events:          1  ( 3.6%)
   AUXTRACE_INFO events:          1  ( 3.6%)
        AUXTRACE events:          2  ( 7.1%)
      THREAD_MAP events:          1  ( 3.6%)
         CPU_MAP events:          1  ( 3.6%)
   FINISHED_INIT events:          1  ( 3.6%)

这是 perf.data 文件中的一部分,其中包含了关于性能计数器 (perf events) 的信息。

  • 0x1a560@perf.data [0x8]: event: 68
    表示一个 perf event,事件编号为 68,发生地址为 0x1a560,大小为 8 字节。
  • raw event: size 8 bytes
    表示原始事件数据的大小为 8 字节
  • 0000: 44 00 00 00 00 00 08 00
    表示原始事件数据的具体内容,以十六进制表示
  • -1 -1 0x1a560 [0x8]: PERF_RECORD_FINISHED_ROUND: unhandled!
    表示一个 PERF_RECORD_FINISHED_ROUND 类型的记录,但是目前还没有处理它。这可能是因为在解析 perf 数据时发现了某个记录类型,但当前的处理程序不支持该记录类型。
  • Aggregated stats:表示性能事件的汇总统计信息。
    • TOTAL events:总事件数
    • 后面是具体的事件类型和数量,每个事件都附带了他在总事件数中的百分比

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

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

相关文章

几款Java源码扫描工具(FindBugs、PMD、SonarQube、Fortify、WebInspect)

说明 有几个常用的Java源码扫描工具可以帮助您进行源代码分析和检查。以下是其中一些工具: FindBugs:FindBugs是一个静态分析工具,用于查找Java代码中的潜在缺陷和错误。它可以检测出空指针引用、资源未关闭、不良的代码实践等问题。FindBu…

Myatis 系列之 一对多、多对一 及 ResultMap的使用

我 | 在这里 🕵️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 🏠 工作 | 广州 ⭐ Java 全栈开发(软件工程师) 🎃 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 🏷️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

2015年2月4日 Go生态洞察:Go语言中的包命名艺术

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

使用 css 实现文字单行居右, 换行居左展示

给外层盒子设置居右展示, 子盒子设置居左。 原理是,如果子盒子没有换行,那么子盒子的长度就是内容的长度,它根本没有空间将字体移动居左,父盒子的居左样式就会生效,子盒子就会居左展示。 当子盒子里面的文字换行了&…

DLL劫持漏洞

以下是自己学习时做的一些笔记,希望对各位有所帮助 DLL劫持漏洞 为什么程序中会有dll的存在 对于 Windows 操作系统,操作系统的大部分功能都由 DLL 提供。 另外,当您在这些 Windows 操作系统之一上运行某一程序时,该程序的很多…

UEC++ day8

伤害系统 给敌人创建血条 首先添加一个UI界面用来显示敌人血条设置背景图像为黑色半透明 填充颜色 给敌人类添加两种状态表示血量与最大血量,添加一个UWidegtComponet组件与UProgressBar组件 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category "Enemy …

怎样通过代理ip提高上网速度

在当今互联网高度发达的时代,我们经常需要使用代理IP来隐藏自己的真实IP地址或提高网络连接速度。然而,有些用户可能会遇到代理IP无法提高网络速度的情况。那么,如何通过代理IP提高上网速度呢?以下是几个技巧: 1.选择…

oracle数据库巡检常见脚本-系列三

简介 作为数据库管理员(DBA),定期进行数据库的日常巡检是非常重要的。以下是一些原因: 保证系统的稳定性:通过定期巡检,DBA可以发现并及时解决可能导致系统不稳定的问题,如性能瓶颈、资源利用率…

G320E是一种低荣声、固定频率的电荷泵型DC/DC转换器

G320E 低噪声电荷泵DC/DC转换器 产品概述: G320E是一种低荣声、固定频率的电荷泵型DC/DC转换器,在输入电压范围在2.7V到5.0V的情况下,该器件可以产生5V的输出电压,最大输出电流达到300mA.G320E外部元件少,非常适合于…

LangChain 7 文本模型TextLangChain和聊天模型ChatLangChain

LangChain系列文章 LangChain 实现给动物取名字,LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索I…

虚拟机解决Linux中Uos和Deepin登录密码忘记的问题 标题Linux Uos Deepin

Uos是切换网络模式解决的(之前有绑定过用户) 因为之前用的是桥接模式登录的时候一直无法联网,改为Nat模式后可以和电脑共用一个网络ip,可以重置密码了,以此解决 ps: 特别说明rw single init/bin/bash 方法和systemd.debug-shell1方法已经失效,不要再做无谓的尝试了Deepin23社区…

人工智能:一种现代的方法 第十四章 概率推理

文章目录 人工智能:一种现代的方法 第十四章 概率推理本章前言14.1 不确定性问题域中的知识表示14.1.1 联合概率分布14.1.2贝叶斯网络 14.2 贝叶斯网络的语义14.2.1表示联合概率分布14.2.2 紧致性14.2.3 节点排序14.2.4 贝叶斯网络中的条件独立关系14.3 条件分布的有…

痤疮分级实验笔记-ResNet

组织数据集 方式1:根据txt文件分类的数据集组织形式(放弃) 你可以使用Python来读取txt文件中的训练集图片信息,并将这些图片从原始文件夹复制到目标文件夹中。 当程序无法找到标签对应的图片或者目标文件夹中已经存在同名图片时…

IT支持团队的绩效指标和最佳实践

一名员工在远程时因笔记本问题寻求IT支持,尽管他们多次尝试排除故障,但由于缺乏专业知识,最终还是无法访问工作所需的应用程序。这时,他们需要一名专业的 IT 技术人员来指导他们,但他们只能等待有人注意到并回应他们的…

BMS基础知识:BMS基本功能,铅酸和锂电池工作原理,电池系统的重要概念!

笔者有话说: 作为BMS从业者来讲,目前接触的BMS系统并不是很高大尚,但基础功能都是有的。 关于BMS的基本功能,工作原理,运行逻辑等,在此做一个梳理,讲一些最基础的扫盲知识,可以作为…

安全牛《数据分类分级自动化建设指南》发布|美创入选代表厂商,分享智能化探索

近日,安全牛发布《数据分类分级自动化建设指南》研究报告,对数据分类分级的主要技术、实施要点、选型指导、发展趋势等展开深入探讨,为各行业数据分类分级自动化工作落地提供帮助与指引。 美创科技被列为代表推荐厂商,落地案例—农…

Flutter:引领移动开发新潮流,跨平台应用程序的终极解决方案

文章目录 一、介绍二、环境搭建三、基础组件四、生命周期管理五、路由控制六、网络请求七、数据存储八、调试与优化《从零基础到精通Flutter开发》特色内容简介作者简介目录获取方式 一、介绍 Flutter是由Google开发的一款开源移动应用开发框架,它可以帮助开发者快…

PS给图片增加一个白色边框。

问题描述:PS如何给图片增加一个白色边框? 解决办法: 第一步:使用shiftAltA快捷键,在图片四周拉出一个灰白色的边框。如下图所示: 第二步,使用快捷键Ctrlshiftn新建一个图层。 并把新建的图层…

C语言——利用函数递归,编写函数不允许创建临时变量,求字符串长度

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int my_strlen(char* str) {if(*str ! \0)return 1my_strlen(str1);elsereturn 0; }int main() {char arr[] "hello";int len my_strlen(arr); //arr是数组&#xff0c;数组传参&#xff0c;传过去的是第…

推荐一款png图片打包plist工具pngPackerGUI_V2.0

png图片打包plist工具&#xff0c;手把手教你使用pngPackerGUI_V2.0 此软件是在pngpacker_V1.1软件基础之后&#xff0c;开发的界面化操作软件&#xff0c;方便不太懂命令行的小白快捷上手使用。1.下载并解压缩软件&#xff0c;得到如下目录&#xff0c;双击打开 pngPackerGUI.…