>> >> >> Reference << << << <<<<<<Ref>>>>>>
size
Modified: 2025-12-31 | Author:ljf12825

GNUsize工具列出每个二进制文件(objfile)的各节(section)大小以及总大小。默认情况下,对于每个文件或每个归档文件的每个模块,都会生成一行输出

基本语法

size [options] file...

常见选项

使用这些选项之一,可以选择GNUsize输出的格式

显示可接受的参数和选项的摘要

输出

假设运行命令

size hello.o 

可能会看到如下输出

   text    data     bss     dec     hex filename
   1024     512     256    1792     700 hello.o

Section

在计算机科学和程序设计中,节(section)是指在可执行文件、目标文件或库文件中按照特定功能和用途划分的一个逻辑区域。这些区域通常包含程序的不同组成部分,比如代码、数据、符号表、调试信息等

二进制文件中常见的节

  1. .text(代码段) 该节包含了程序的可执行代码,即程序的指令。它是执行时被加载到内存中的部分,通常是只读的。.text节是程序的核心部分,执行时 CPU 会从这里加载指令

  2. .data(数据段) 该节存储已初始化的全局变量和静态变量。在编译时,这些变量被赋予初值,程序运行时就会用到这些值

  3. .bss(未初始化数据段) 该节包含未初始化的全局变量和静态变量。这些变量在程序运行时会被系统自动初始化为零。尽管这些变量在文件中没有实际数据,但他们在内存中会分配空间

  4. .rodata(只读数据段) 包含程序的只读常量数据,如字符串常量或其他只读数据。它与.text一样是只读的,不会被修改

  5. .symtab(符号表) 该节包含了程序中的符号信息,如函数、变量的名称、地址等,通常用于调试和链接。这个节在编译时被生成,但在最终的可执行文件中,可能会被去掉

  6. .strtab(符号串表) 用于存储符号表中使用的字符串,如变量名、函数名等。这是与.symtab配合使用的,帮助解析符号信息

  7. .debug(调试信息) 该节包含调试符号、源代码文件信息等,在调试时使用。它对于程序的正常执行无关紧要,但对开发者调试程序时至关重要

  8. .plt(过程链接表) 动态链接的程序中,.plt节用于支持动态链接。它包含了调用外部函数的代码

  9. .got(全局偏移表) 动态链接程序中的.got节存储了全局变量和函数的地址,用于动态链接时的符号解析

节的特点

节与段的区别

虽然节和段的内容可能重叠(例如.text节对应代码段,.data节对应数据段),但它们的概念和用途不同。节是编译器和链接器用于管理程序文件的结构,而段是操作系统用来组织和管理程序在内存中执行的结构