babeltrace与CTF相关学习笔记-4

news2024/12/15 8:42:53

babeltrace与CTF相关学习笔记-4

  • 写在前面
    • metadata_string
  • 重头开始定位,操作meta的位置
    • bt_ctf_trace_get_metadata_string
  • stream部分
    • 内存的问题

写在前面

正在并行做几件事。
在编译过程中,突然想到,还是再详细研究一下之前的例程。
一是详细找了一下,除了前述这例子,没有其它的有价值的,对眼前这件事情来说。
然后也花了一些时间,进一步了解babeltrace,发现,也没有多少有用的价值。
所以,还是重新看一下代码:meta是如何被创建的。

metadata_string

bt_ctf_writer_flush_metadata中,我们看到,metadata_string这个变量。

在这里插入图片描述
在bt_ctf_writer_flush_metadata被调用之前,metadata大小是0
在这里插入图片描述而如下上代码处,
metata_string,已经包含了全部的信息:

0x5555555d8a00 "/* CTF 1.8 */\n\ntrace {\n\tmajor = 1;\n\tminor = 8;\n\tuuid = \"e5dbb979-0a16-45e9-8e11-427aeb6066ea\";\n\tbyte_order = be;\n\tpacket.header := struct {\n\t\tinteger { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = native; } magic;\n\t\tinteger { size = 8; align = 8; signed = false; encoding = none; base = decimal; byte_order = native; } uuid[16];\n\t\tinteger { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = native; } stream_id;\n\t\tinteger { size = 22; 
....

全文前本系列2。

这就确实比较难办了。因为之前 就处理完成了。

重头开始定位,操作meta的位置

bt_ctf_trace_get_metadata_string

在这里,找到了一直想要的:
在这里插入图片描述看到了曙光。
下一个问题是,研究序列化之前,是如何构建stream的内容的。
下面这几句,我们先跳过:

	g_string_append(context->string, "/* CTF 1.8 */\n\n");
	if (append_trace_metadata(trace, context)) {
		/* append_trace_metadata() logs errors */
		goto error;
	}
	append_env_metadata(trace, context);
	g_ptr_array_foreach(trace->common.clock_classes,
		(GFunc) bt_ctf_clock_class_serialize, context);

它们对应

/* CTF 1.8 */

trace {
	major = 1;
	minor = 8;
	uuid = "6390b8a6-c2c9-4b5a-b575-bf8addb369b0";
	byte_order = be;
	packet.header := struct {
		integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = native; } magic;
		integer { size = 8; align = 8; signed = false; encoding = none; base = decimal; byte_order = native; } uuid[16];
		integer { size = 32; align = 8; signed = false; encoding = none; base = decimal; byte_order = native; } stream_id;
		integer { size = 22; align = 1; signed = false; encoding = none; base = decimal; byte_order = native; } custom_trace_packet_header_field;
	} align(8);
};

env {
	host = "testhost";
	test_env_int = 654321;
	test_env_str = "oh yeah";
	sysname = "GNU/Linux";
	nodename = "testhost";
	release = "4.4.0-87-generic";
	version = "#110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017";
	machine = "x86_64";
	new_field = "test";
};

clock {
	name = test_clock;
	uuid = "e004df4e-1bb0-42f2-8478-363763d6b160";
	description = "This is a test clock";
	freq = 1123456789;
	precision = 10;
	offset_s = 13515309;
	offset = 1234567;
	absolute = true;
};

注意,我不是说这些代码不重要,我也跟过了,也都相当复杂。
而且,我的工程中,肯定会引用这部分,这个头部,也不是那么好制作。
这里我不想写这些内容。因为重点还是stream的部分,我们先把这一段研究一下:

	for (i = 0; i < trace->common.stream_classes->len; i++) {
		/* bt_ctf_stream_class_serialize() logs details */
		err = bt_ctf_stream_class_serialize(
			trace->common.stream_classes->pdata[i], context);
		if (err) {
			/* bt_ctf_stream_class_serialize() logs errors */
			goto error;
		}
	}

stream部分

代码见上,很简单,从trace中得到,所有的stream,然后序列化。

内存的问题

如下图,这可能是个重要的问题,context->string的长度,只有4096
在这里插入图片描述根了一遍,很无聊。
原因是很常规,层层迭代,然后存到字符串中。
这里有两点,让我困到不行了,
一个,我现在更加关心这些schema的类是如何创建的。
显然后面的迭代,只是从已存在的class序列化。
第二,是因为序列化不应该这样写。
序列化的意思是存存,我们为什么要存盘,最重要的原因之一是减少内存的占用。
这种迭代是不对的!
比如在逻辑上,event是stream的子node,
但在现实中,到了文件层面,大家只是序列的一部分。
所以,这里的问题,需我要自己来处理。比较头疼。
nanolog中有成千上万个meta,不可能一次存盘。
在这里插入图片描述跟踪的主要的点,我稍贴部分图在这里:
我们最关心的最小粒度是event,在这里:
在这里插入图片描述
先放在这里,有时间再看,因为现在要再从头来过,找到class创建的过程中,如何生成mata定义的。
在这里插入图片描述

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

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

相关文章

多旋翼无人机 :桨叶设计—跷跷板结构

多旋翼无人机 &#xff1a;桨叶设计——跷跷板结构 前言跷跷板结构 前言 2024年11月&#xff0c;大疆发布了最新的农业无人机T70和T100。其中T70不同于以往的机型&#xff0c;在桨夹处采用了翘翘板结构&#xff0c;大疆将其命名为“挥舞桨叶”。 T70 无人机如下 放大其中螺旋…

低通滤波器,高通滤波器,公式

1 低通滤波器 &#xff1a;输出的是电容的电压 1 低通滤波器可以把低频信号上面的高频信号给滤掉 2 100hz正常通过 3 经过低通滤波器后&#xff0c;波形光滑&#xff0c;绿色波形。一致 4 电容充电速度跟不上输入信号的速度&#xff08;因为加了电阻&#xff0c;限制了电流&…

如何打造个人知识体系?

第一&#xff0c;每个人的基本情况不同。比如我有一个类别跟「设计」相关&#xff0c;这是自己的个人爱好&#xff0c;但不一定适合其他人。再比如我还有一个类别跟「广告文案」相关&#xff0c;因为里面很多表达可以借用到演讲或写作中&#xff0c;这也不适合所有人。 第二&am…

5G中的ATG Band

Air to Ground Networks for NR是R18 NR引入的。ATG很多部分和NTN类似中的内容类似。比较明显不同的是&#xff0c;NTN的RF内容有TS 38.101-5单独去讲&#xff0c;而ATG则会和地面网络共用某些band&#xff0c;这部分在38.101-1中有描述。 所以会存在ATG与地面网络之间的相邻信…

《自动驾驶技术的深度思考:安全与伦理的挑战》

内容概要 在当今这个自动驾驶技术飞速发展的时代&#xff0c;我们生活的节奏恰似一场疾驰的赛车&#xff0c;然而&#xff0c;赛道上并非总是平坦。在这场技术革命中&#xff0c;安全与伦理问题像是潜伏在阴影中的幽灵&#xff0c;轮番考验着我们的道德底线与法律界限。 随着…

hbuilder 安卓app手机调试中基座如何设置

app端使用基座 手机在线预览功能 1.点击运行 2.点击运行到手机或者模拟器 3.制作自定义调试基座 4.先生成证书【可以看我上一篇文档写的有】&#xff0c;点击打包 5.打包出android自定义调试基座【android_debug.apk】,【就跟app打包一样需要等个几分钟】 6.点击运行到手…

【AIGC】如何高效使用ChatGPT挖掘AI最大潜能?26个Prompt提问秘诀帮你提升300%效率的!

还记得第一次使用ChatGPT时&#xff0c;那种既兴奋又困惑的心情吗&#xff1f;我是从一个对AI一知半解的普通用户&#xff0c;逐步成长为现在的“ChatGPT大神”。这一过程并非一蹴而就&#xff0c;而是通过不断的探索和实践&#xff0c;掌握了一系列高效使用的技巧。今天&#…

汽车免拆诊断案例 | 2014款保时捷卡宴车发动机偶尔无法起动

故障现象 一辆2014款保时捷卡宴车&#xff0c;搭载3.0T 发动机&#xff0c;累计行驶里程约为18万km。车主反映&#xff0c;发动机偶尔无法起动。 故障诊断 接车后试车&#xff0c;发动机起动及运转均正常。用故障检测仪检测&#xff0c;发动机控制单元&#xff08;DME&#x…

aippt:AI 智能生成 PPT 的开源项目

aippt&#xff1a;AI 智能生成 PPT 的开源项目 在现代办公和学习中&#xff0c;PPT&#xff08;PowerPoint Presentation&#xff09;是一种非常重要的展示工具。然而&#xff0c;制作一份高质量的PPT往往需要花费大量的时间和精力。为了解决这一问题&#xff0c;aippt项目应运…

【泛微系统】流程发起次数报表

流程发起次数报表 应用场景: 查询所有发起过业务流程的员工的信息,可作为绩效考核、系统使用情况等依据; 如何使用该SQL生成系统在线报表,实时查询最新的发起数据? 1、数据库创建视图,并定义一个视图名称如;view_test1 2、系统后台建模引擎-表单-右键创建一个虚拟表单…

【电子元器件】电感基础知识

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、 电感的基本工作原理 1. 电感的基本工作原理如下&#xff1a; &#xff08;1&#xff09; 当线圈中有电流通过时&#…

IDEA 修改格式化仅格式化本次改动代码

最近总是发现格式化的时候会格式化文件所有代码&#xff0c;提交Git 后再看提交日志&#xff0c;就很不清晰。修改方式如下 中文&#xff1a; 格式化代码快捷键[中文配置]&#xff1a; 英文&#xff1a; 格式化代码快捷键[英文配置]&#xff1a;

数据结构开始——时间复杂度和空间复杂度知识点笔记总结

好了&#xff0c;经过了漫长的时间学习c语言语法知识&#xff0c;现在我们到了数据结构的学习。 首先&#xff0c;我们得思考一下 什么是数据结构&#xff1f; 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素…

【游戏设计原理】7 - 加德纳的多元智能理论

虽然多元智能理论是对认知方式的分类&#xff0c;但它也可以为游戏设计提供丰富的思路和策略&#xff0c;帮助设计师创建更具吸引力、包容性和多样性的游戏。通过理解不同玩家的认知方式和优势&#xff0c;我们可以更精准地设计游戏的元素和玩法&#xff0c;使其能够吸引广泛的…

【OpenCV】基于分水岭算法的图像分割

介绍 分水岭算法&#xff08;Watershed Algorithm&#xff09;是一种基于形态学的图像分割方法&#xff0c;它模仿了地理学中的分水岭概念。在图像处理中&#xff0c;分水岭算法通过模拟水流从山顶流向谷底的过程来分割图像&#xff0c;其中局部极小值点被视为“山谷”&#x…

ubuntu20.04+ROS Noetic 安装PX4+Mavros

文章目录 系统环境安装依赖PX4 安装老版本安装测试环境变量添加版本查看 安装MAVROS&#xff08;二进制安装非源码安装&#xff09;测试 OGC 地面站安装测试mavros与sitl通信参考 系统环境 ubuntu 20.04 ROS Noetic 如果系统安装了Anaconda等虚拟环境管理器&#xff0c;要退出…

Vue Web开发(七)

1. echarts介绍 echarts官方文档 首先我们先完成每个页面的路由&#xff0c;之前已经有home页面和user页面&#xff0c;缺少mail页面和其它选项下的page1和page2页面。在view文件夹下新建mail文件夹&#xff0c;新建index.vue&#xff0c;填充user页面的内容即可。在view下新建…

WordPress插件 Download-block-plugin下载按钮图标美化

WordPress插件 Download-block-plugin下载按钮图标美化

KALI容器虚拟化Docker安装

为什么需要DOCKER 环境一致性保障 开发与生产环境统一&#xff1a;在软件开发过程中&#xff0c;开发环境和生产环境的差异常常导致应用程序出现问题。例如&#xff0c;开发人员在自己的机器上开发了一个 Web 应用&#xff0c;使用了特定版本的操作系统、数据库和编程语言运行…

【LC】240. 搜索二维矩阵 II

题目描述&#xff1a; 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,…