blob_buf,blobmsg内存图详解
关键字:blobbuf, blobmsg
如下是内存图,可以看到,blob_buf其实是一个blob_attr里面嵌套blob_attr数组,而blobmsg本身没有这个结构体,只是blob_buf的value前面加了blobmsg_hdr头。
注意点:
(1)value部分有字节对齐,4字节对齐
(2)id字段里面的长度是包含4字节id的长度
struct blob_attr {
uint32_t id_len; /* 高1位为extend标志,高7位存储id, 低24位存储blob长度(data长度+结构体长度) */
char data[];
} __packed;
构造的blobmsg
打印出来的数据
有评论对dump packet函数感兴趣,如下:
unsigned char *phrase_line(unsigned int num, unsigned char *src, unsigned int len)
{
#define HEAD_LEN (4 + 3 + 1) // "0000│ "
#define HEX_LEN (16 * 3 + 1)
#define SPACE_LEN (3 + 1) // "│ "int i = 0;static unsigned char dst[128];memset(dst, 0x0, sizeof(dst));if(0 == len){return dst;}sprintf(dst, "%04X│ ", num);for(i = 0; i < len; i++){sprintf(dst + HEAD_LEN + i * 3 + (i >= 8 ? 1 : 0), "%02X ", src[i]);dst[HEAD_LEN + HEX_LEN + SPACE_LEN + i + (i >= 8 ? 1 : 0)] = (src[i] >= 0x20 && src[i] <= 0x7E) ? src[i] : '.';}dst[HEAD_LEN + 8 * 3] = ' ';memcpy(dst + HEAD_LEN + HEX_LEN, "│ ", SPACE_LEN);for(i = HEAD_LEN + len * 3 + (len > 8 ? 1 : 0); i < HEAD_LEN + HEX_LEN; i++){dst[i] = ' ';}dst[HEAD_LEN + HEX_LEN + SPACE_LEN + 8] = ' ';return dst;
}void dump_packet(unsigned char *src, unsigned int len)
{int i = 0, tmpLen = 0;while(i < len){tmpLen = 16;if(i + 16 > len){tmpLen = len - i;}printf("%s\n", phrase_line(i, src + i, tmpLen));i += tmpLen;}return ;
}
blob_buf,blobmsg内存图详解相关推荐
- 【C++】C++对象模型:对象内存布局详解(C#实例)
C++对象模型:对象内存布局详解 0.前言 C++对象的内存布局.虚表指针.虚基类指针解的探讨,参考. 1.何为C++对象模型? 引用<深度探索C++对象模型>这本书中的话: 有两个概念可 ...
- Android-Binder进程间通讯机制-多图详解
本系列: Android-Binder进程间通讯机制-多图详解 一次Binder通信最大可以传输多大的数据? 关于Binder (AIDL)的 oneway 机制 概述 最近在学习Bin ...
- JVM之内存结构详解
对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug.同时,JVM也是面试环节的中重灾区.今天开始,<JVM详解>系列开启,带大家深入了解JVM相 ...
- 71张图详解IP地址、IP 路由、三层转发、ARP、ICMP
71张图详解IP地址.IP 路由.三层转发.ARP.ICMP 架构师之道2021-04-07 13:51:24 https://www.toutiao.com/i6948285918986027531 ...
- (动图详解)汇编视角观察函数栈帧的创建和销毁
目录 1.阅读本文的价值 2.函数栈帧及栈的概念 3.部分寄存器及汇编指令 4.main函数的调用 5.main函数的栈帧创建 6.变量的栈帧创建 6.函数传参 7.函数内部运算及销毁 ...
- Spark 内存管理详解(下):内存管理
本文转自:Spark内存管理详解(下)--内存管理 本文最初由IBM developerWorks中国网站发表,其链接为Apache Spark内存管理详解 在这里,正文内容分为上下两篇来阐述,这是下 ...
- FreeRTOS笔记(六):五种内存管理详解
不同的嵌入式系统对于内存分配和时间要求不同.FreeRTSO将内存分配作为移植层的一部分,这样FreeRTOS使用者就可以设用自己的合适的内存分配方法. 当内核需要分配内存时可以调用pvPortMal ...
- 123 张图详解 177 个计算机网络名词
大家好,我是小弗.上篇<60 张图详解 98 个常见网络概念>有一段时间了,现在重新汇总整理,把最近提到的网络名词也加上.同时为了方便阅读,增加了大量的配图,让网络小白也能轻松理解.考虑到 ...
- Java内存溢出详解之Tomcat配置
Java内存溢出详解 转自:http://elf8848.iteye.com/blog/378805 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError ...
最新文章
- 当一回标题党“数理系优秀校友访谈”
- crontab 执行时间与系统时间不一致
- 中国半导体硅片行业未来发展趋势与销售规模预测报告2022版
- position:absolute的小坑
- 计算机考研雷区,考研的五大雷区是什么 如何避免
- leetcode 292 NimGame
- android图片视频图片封装,详解android 视频图片混合轮播实现
- SOA应用难逃出的五座大山
- StanfordDB class自学笔记 (6) 关系代数
- java如何验证手机号码_Java 手机号码正则表达式验证
- 精心整理|Python爱好者社区历史文章合集(作者篇)--20190925从豆瓣获取
- 关于一本通1205超时问题
- 计算机指令执行过程详解
- 大学生职业生涯规划书性格特征_大学生职业生涯规划书自我分析
- 尚硅谷springboot笔记
- 全球电动汽车充电标准最详解析
- centos7安装pip
- 手柄映射键盘_如何使用运动加加TAP手柄在PC上玩手游
- Java中可变类型和不可变类型
- VMware安装Ubuntu开启蓝屏解决方案
热门文章
- centos恢复图形界面_CentOS 7 启动与切换图形界面
- 网易云复盘:云计算前端这一年(AngularJS粉慎入)
- React Native按钮详解|Touchable系列组件使用详解
- 64位BASM学习随笔(一)
- jetty;linux 目录结构
- 《C++标准程序库》学习笔记(一)C++相关特性
- android preferenceActivity的用法
- 学后端,一步一坑,遇坑就跳,跳完再爬---之mysql与mysql可视化工具
- 【Vue2.0】—mixin混入 (十五)
- HTML+CSS实现轮播图效果