• bloaty


    安装教程参考: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
    
    • 1

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

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

    bloaty -d segments,symbols my_program
    
    • 1

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


    在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
       ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

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

  • 相关阅读:
    公司面试题总结(六)
    黑客技术(网络安全)自学2024
    接口自动化测试系列-接口测试
    xbox下载游戏速度一直为0b/s怎么办?
    前端面试之事件循环
    【Rust】003-基础语法:流程控制
    字节网上面经整理(100道面试题)一篇
    IP&TCP知识
    常见的4种Bug 出现原因和解决方案
    树莓派+墨水屏 = DIY一个超慢速电影播放器
  • 原文地址:https://blog.csdn.net/u013318019/article/details/133102182