bloaty

2023-09-20 21:33:58

安装教程参考:https://github.com/google/bloaty

Bloaty是一个用于分析二进制文件大小的工具,它可以深入分析二进制文件,使用自定义的ELF、DWARF和Mach-O解析器,将二进制文件的每个字节准确地归因于生成它的符号或编译单元。以下是一些使用Bloaty的基本步骤:

  1. 安装Bloaty:你可以从GitHub上的Bloaty仓库下载源代码,并按照README.md文件中的说明进行编译和安装。

  2. 运行Bloaty:在命令行中,你可以使用bloaty [options] file...命令来运行Bloaty,其中[options]是一组可选的命令行参数,file...是一个或多个要分析的二进制文件的路径。

  3. 理解输出:Bloaty的输出是一个分层的报告,显示了二进制文件中各个部分的大小。你可以使用多个数据源来生成这个报告,例如,你可以同时使用segmentssectionssymbols数据源来查看由段、节和符号占用的空间。

  4. 使用配置文件:如果你有太多的输入文件无法放在命令行中,或者你想重用自定义的数据源,你可以使用配置文件。配置文件是一个Protocol Buffers文本格式的文件,其模式定义在src/bloaty.proto中。

当然可以。假设你有一个名为my_program的二进制文件,你想要分析它的大小。你可以使用以下命令:

bloaty my_program

这将会输出一个报告,显示my_program中各个部分的大小。报告的每一行都对应于一个特定的部分,每一列都对应于一个特定的度量。

如果你想要更详细的报告,你可以使用-d选项来指定数据源。例如,以下命令将会生成一个按照段和符号分组的报告:

bloaty -d segments,symbols my_program

这将会显示出哪些符号在哪些段中占用了空间。


在Bloaty的输出中,FILE SIZEVM SIZE代表了不同的概念:

  • FILE SIZE:这是二进制文件在磁盘上占用的空间大小。这包括了所有的元数据、代码、数据,以及可能存在的填充空间。

  • VM SIZE:这是二进制文件在内存中占用的空间大小。当二进制文件被加载到内存中执行时,只有那些实际需要的部分(例如代码和数据)才会被加载,而元数据和填充空间通常不会被加载。

因此,FILE SIZEVM SIZE的大小可能会有所不同。具体的差异取决于二进制文件的具体内容和结构。


在Bloaty的输出中,每一行都代表一个特定的部分,每一列都代表一个特定的度量。以下是一些常见的度量的含义:

  • FILE SIZE:这是二进制文件在磁盘上占用的空间大小。这包括了所有的元数据、代码、数据,以及可能存在的填充空间²。

  • VM SIZE:这是二进制文件在内存中占用的空间大小。当二进制文件被加载到内存中执行时,只有那些实际需要的部分(例如代码和数据)才会被加载,而元数据和填充空间通常不会被加载²。

  • RATIO:这是FILE SIZEVM SIZE与总文件大小或总虚拟内存大小的比例。

  • SYMBOL:这是符号的名称。符号是二进制文件中的一个实体,例如函数或变量。

例如,以下是一个可能的Bloaty输出:

    FILE SIZE        VM SIZE    
 --------------  -------------- 
  22.0% 1.22Mi   0.0%       0    [Unmapped]
  15.6%   873Ki  57.8%   873Ki    .text
  12.7%   709Ki   0.0%       0    .strtab
   9.8%   547Ki   0.0%       0    .symtab
   6.4%   355Ki  23.5%   355Ki    .rodata
   ...

在这个例子中,.text段占据了文件大小的15.6%,虚拟内存大小的57.8%。[Unmapped]部分占据了文件大小的22.0%,但是它在虚拟内存中并没有占用任何空间,这可能是因为它包含了一些不需要加载到内存中的元数据。

更多推荐

计算机是如何工作的下篇

操作系统(OperatingSystem)操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等.操作系统由两个基本功能:对下,要管理硬件设备.对上,要给软件提供稳定的运行环境.因此,操作系统是软件硬件用户之

【C#】Redis在net core下使用教程

系列文章文章目录系列文章前言一、Redis简介1.1Redis优势1.2Redis与其他key-value存储有什么不同?二、Redis安装步骤2.1下载链接2.2安装测试三、Redis修改帐户密码四、Redis写成Windows服务五、.netcore-使用CSRedisCore操作redis前言官方教程:https

【Azure】构建安全架构的 Azure 云:深入了解零信任体系结构

文章目录前言一、零信任安全模型的概念以及背景介绍二、传统安全模型(边界模型)三、零信任模型(现阶段主流云厂商策略)四、Azure中的零信任体系结构(本文重点)4.1基础知识点(必须了解)(一)Azure中零信任的指导原则(二)Azure中调整为零信任4.2Azure中的零信任体系结构(六层防御)4.3AzureClou

STM32H7 Azure RTOS

STM32H7是意法半导体(STMicroelectronics)推出的一款高性能微控制器系列,基于ArmCortex-M7内核。它具有丰富的外设和高性能计算能力,适用于各种应用领域。AzureRTOS(原名ThreadX)是一款实时操作系统(RTOS),是AzureIoT解决方案的一部分。它是一个可裁剪、可扩展的嵌入

算法通关村第十九关:青铜-动态规划是怎么回事

青铜挑战-动态规划是怎么回事动态规划(简称DP,DynamicProgramming):最热门、最重要的算法之一。面试中大量出现,整体偏难。1.热身:重复计算和记忆化搜索(如何说一万次"我爱你")举例:看谁说更多的我爱你classFibonacciTest:def__init__(self):self.count=0d

MOEA算法的背景知识

MOEA算法多目标进化算法优化MOEA工作原理举个例子为什么单一策略可能会导致种群中的个体过于相似?种群在MOEA里面做什么?举例说明多目标进化算法优化MOEAMulti-objectiveevolutionaryalgorithmoptimization(MOEA)多目标进化算法优化(MOEA)是一种用于解决多目标优

日志审计设计-结合spring-aop实现

日志审计设计设计原则和思路:元注解方式结合AOP,灵活记录操作日志能够记录详细错误日志为运营以及审计提供支持日志记录尽可能减少性能影响操作描述参数支持动态获取,其他参数自动记录。1.定义日志记录元注解,根据业务情况,要求description支持动态入参。例:新增应用{applicationName},其中applic

Linux 文件 & 目录管理

Linux文件基本属性Linux系统是一种典型的多用户系统,为了保护系统的安全性,不同的用户拥有不同的地位和权限。Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。可以使用命令:ll或ls–l来显示一个文件的属性以及文件所属的用户和组,如图所示:详细解析命令:ls-l中显示的内容使用命令:ll

自定义开发成绩查询小程序

在当今数字化时代,教育行业借助技术手段提高教学效果。作为老师,拥有一个自己的成绩查询系统可以帮助你更好地管理学生成绩,并提供更及时的反馈。本文将为你详细介绍如何从零开始搭建一个成绩查询系统,让你的教学工作更加高效和便捷。不过比较便捷好用的方法还是直接使用现成工具。今天我为大家争取到了易查分的福利,只需要在注册时输入邀请

解密Docker容器网络

一个Linux容器能看见的“网络栈”,被隔离在它自己的NetworkNamespace中。1“网络栈”的内容网卡(NetworkInterface)回环设备(LoopbackDevice)路由表(RoutingTable)iptables规则对于一个进程,这些构成它发起、响应网络请求的基本环境。作为一个容器,它可声明直

网络安全(黑客)自学

想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如Web安全技术,既有Web渗透,也有Web

热文推荐