两者是有一些区别的,我们平时在进行程序构建的时候理解的.text、.bss、.data段,这些都是section,也就节区的概念。这些段通过section header table进行组织与重定位。 但是对于segment来说,程序代码段、数据段是Segment。代码段又可以分为.text,数据段又分为.data、.bss等。 通过readelf -l可以查看具体的可执行文件...
总的来说,段是没有名字的,但我们往往把包含text节的段叫做代码(text)段,把含有data节的段叫做数据(data)段。一定程度上在口述时习惯也可以理解为 "段 = 节",例如bss段,rodata段,实际他们指bss节,rodata节。甚至有时候我们说text段就狭义的指text节,完全不用太纠结。 3. 关键的文件结构和节 3.1 一些关键...
保存了只读的数据,比如printf ("Hello World!\n");这句代码就是保存在.rodata节中,并且只能在text段中找到.rodata节。 .plt节 包含动态链接器调用从共享库导入的函数所必须的相关代码。 .data节 .data节存在于data段中,保存了初始化的全局变量等数据。 .bss节 保存了未进行初始化的全局数据,在data段中。
数据段(.data)和只读数据段(.rodata) .data段保存的是那些已经初始化了的全局静态变量和局部静态变量。前面SimpleSection.c代码里面一共有两个这样的变量,都是int类型的,一共刚好8字节。 在SimpleSection.c里在调用”printf”的时候,用到了一个字符串常量”%d\n”,它是一种只读数据,所以被放到了”.rodata”段。
ELF文件格式最重要的就是所谓的段,特别是其中的代码段和数据段。对应上图就是.text,.data两个段。每个段都对应一个段表来描述,而若干隔断会组成一个整体,它对应一个program,而后者则由program header table来指向,讲解ELF数据结构最为详细的就是网址如下,有心的朋友可以认真阅读: https://man7.org/linux/man...
Outline ELF文件解剖 ~Linux C_5/6/7/12_ELF链接 段和节的理解 一、text段、data段和bss段知识介绍(初步了解) 三个段 1、bss(可读可写) bss是英文Block Started by Symbol的简称,通常是指用来存放程序中未初始化的全局变量的一块内存
数据段(.data)保存的是哪些已经初始化(非零)的全局变量(静态变量和非静态变量)和局部静态变量。 gint_val 和 static_val 存在数据段。0x64 和 0x65 刚好对应 100 和 101(ASCII d 和 e) 数据段是 16 字节对齐所以刚好占 16 个字节大小。对齐和平台有关。
程序编译后生成的目标文件至少含有三个段,分别为:.text、.data和.bss。这三个段的大致结构图如下所示: 其中.text即为代码段,为只读。.bss段包含程序中未初始化的全局变量和static变量。 data段包含三个部分:heap(堆)、stack(栈)和静态数据区。 当程序在执行时动态分配空间(C中的malloc函数),所分配的空间就属...
.data段保存的是那些已经初始化了的全局静态变量和局部静态变量。前面的SimpleSection.c代码里面一共有两个这样的变量,分别是global_init_varabal与static_var。这两个变量每个4个字节,一共刚好8个字节,所以“.data”这个段的大小为8个字节。 (3)只读数据段 “.rodata”段存放的是只读数据,一般是程序里面的只读...
ELF格式的目标文件和可执行文件在结构上没有本质差异,ELF不仅仅描述目标文件,也用于描述可执行文件,Windows下的dll和.lib, Linux下的.so和.a文件都是按照类ELF格式存储,下图描述了ELF链接视图(.o文件、.so文件)和执行视图,链接视图描述了各个段(section)的组成,如.text、.data、bss段。执行视图由segment组成,segm...