关键字: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内存图详解相关推荐

  1. 【C++】C++对象模型:对象内存布局详解(C#实例)

    C++对象模型:对象内存布局详解 0.前言 C++对象的内存布局.虚表指针.虚基类指针解的探讨,参考. 1.何为C++对象模型? 引用<深度探索C++对象模型>这本书中的话: 有两个概念可 ...

  2. Android-Binder进程间通讯机制-多图详解

    本系列: Android-Binder进程间通讯机制-多图详解 一次Binder通信最大可以传输多大的数据?​​​​​​​ 关于Binder (AIDL)的 oneway 机制 概述 最近在学习Bin ...

  3. JVM之内存结构详解

    对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug.同时,JVM也是面试环节的中重灾区.今天开始,<JVM详解>系列开启,带大家深入了解JVM相 ...

  4. 71张图详解IP地址、IP 路由、三层转发、ARP、ICMP

    71张图详解IP地址.IP 路由.三层转发.ARP.ICMP 架构师之道2021-04-07 13:51:24 https://www.toutiao.com/i6948285918986027531 ...

  5. (动图详解)汇编视角观察函数栈帧的创建和销毁

    目录 ​1.阅读本文的价值 ​2.函数栈帧及栈的概念 ​3.部分寄存器及汇编指令 ​4.main函数的调用 5.main函数的栈帧创建 ​6.变量的栈帧创建 ​6.函数传参 ​7.函数内部运算及销毁 ...

  6. Spark 内存管理详解(下):内存管理

    本文转自:Spark内存管理详解(下)--内存管理 本文最初由IBM developerWorks中国网站发表,其链接为Apache Spark内存管理详解 在这里,正文内容分为上下两篇来阐述,这是下 ...

  7. FreeRTOS笔记(六):五种内存管理详解

    不同的嵌入式系统对于内存分配和时间要求不同.FreeRTSO将内存分配作为移植层的一部分,这样FreeRTOS使用者就可以设用自己的合适的内存分配方法. 当内核需要分配内存时可以调用pvPortMal ...

  8. 123 张图详解 177 个计算机网络名词

    大家好,我是小弗.上篇<60 张图详解 98 个常见网络概念>有一段时间了,现在重新汇总整理,把最近提到的网络名词也加上.同时为了方便阅读,增加了大量的配图,让网络小白也能轻松理解.考虑到 ...

  9. Java内存溢出详解之Tomcat配置

    Java内存溢出详解 转自:http://elf8848.iteye.com/blog/378805 一.常见的Java内存溢出有以下三种: 1. java.lang.OutOfMemoryError ...

最新文章

  1. 当一回标题党“数理系优秀校友访谈”
  2. crontab 执行时间与系统时间不一致
  3. 中国半导体硅片行业未来发展趋势与销售规模预测报告2022版
  4. position:absolute的小坑
  5. 计算机考研雷区,考研的五大雷区是什么 如何避免
  6. leetcode 292 NimGame
  7. android图片视频图片封装,详解android 视频图片混合轮播实现
  8. SOA应用难逃出的五座大山
  9. StanfordDB class自学笔记 (6) 关系代数
  10. java如何验证手机号码_Java 手机号码正则表达式验证
  11. 精心整理|Python爱好者社区历史文章合集(作者篇)--20190925从豆瓣获取
  12. 关于一本通1205超时问题
  13. 计算机指令执行过程详解
  14. 大学生职业生涯规划书性格特征_大学生职业生涯规划书自我分析
  15. 尚硅谷springboot笔记
  16. 全球电动汽车充电标准最详解析
  17. centos7安装pip
  18. 手柄映射键盘_如何使用运动加加TAP手柄在PC上玩手游
  19. Java中可变类型和不可变类型
  20. VMware安装Ubuntu开启蓝屏解决方案

热门文章

  1. centos恢复图形界面_CentOS 7 启动与切换图形界面
  2. 网易云复盘:云计算前端这一年(AngularJS粉慎入)
  3. React Native按钮详解|Touchable系列组件使用详解
  4. 64位BASM学习随笔(一)
  5. jetty;linux 目录结构
  6. 《C++标准程序库》学习笔记(一)C++相关特性
  7. android preferenceActivity的用法
  8. 学后端,一步一坑,遇坑就跳,跳完再爬---之mysql与mysql可视化工具
  9. 【Vue2.0】—mixin混入 (十五)
  10. HTML+CSS实现轮播图效果