目标文件的objdump输出中的标志

scdmb:

在某些目标文件上有objdump的输出:

$ objdump -h main.o

main.o:     file format elf32-i386

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000000b  00000000  00000000  00000034  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00000000  00000000  00000040  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00000000  00000000  00000040  2**2
                  ALLOC
  3 .note.GNU-stack 00000000  00000000  00000000  00000040  2**0
                  CONTENTS, READONLY, CODE

这些标志CONTENTS,ALLOC,LOAD等是什么意思?

赫里斯托·伊利耶夫(Hristo Iliev):

您将看到目标文件中每个节的ELF段标志,节类型和节标志的组合的解释。

  • LOAD 表示该节位于一个可装入的段中,即,在创建进程时可以将其内容从文件中读取到内存中

在System V应用程序二进制接口第4章中,对节标记进行了很好的记录,尽管名称与objdump显示的名称略有不同

  • CODE表示该部分包含可执行代码;它由SHF_EXECINSTR节标题中标志指示
  • DATA表示该部分不可执行,但可写,由SHF_WRITE标志的存在指示
  • READONLY 表示该部分既不是可执行文件也不是可写文件,应放置在只读内存页中
  • ALLOC表示该部分占用了内存,例如,在创建进程时,实际上已分配了存储页来保存该部分的内容,如SHF_ALLOC标志所示。某些部分,例如包含调试信息的部分,在正常程序执行期间不会读入内存,也不会标记为ALLOC节省内存。

类型的节SHT_PROGBITS在文件中具有相应的内容,并显示为CONTENTS某些部分在文件中没有对应的内容,例如.bss部分,类型为SHT_NOBITS

.text节包含程序可执行代码。CONTENTS由于它是type,因此被显示SHT_PROGBITS内存应该保留给该部分,因为它已经存在,ALLOC并且由于其内容位于LOAD-able段中,因此应该从文件中加载它的内容程序代码通常是不可修改的,因此该部分位于只读存储器中。它包含要执行的指令,并因此包含CODE标志。

具有静态存储类的初始化变量进入本.data节。它们的初始值存储在文件中,并在创建过程时从那里读取。在C / C ++中,它们是适当初始化的全局变量,静态局部变量和C ++静态成员变量,例如static int a = 10;Fortran会放置已初始化的SAVE-d变量和COMMON块,并在其中使用block DATA语句为其赋予初始

.bss部分(历史名称,是Block Started by Symbol的缩写)是最简单的部分。使用静态存储类保存未初始化的变量。它是类型的一部分,SHT_NOBITS在文件中不占空间。内存ALLOC为此分配了内存,但没有从文件中读取任何内容来预填充内存-它仅保留内核内存分配器提供的所有零。

常量通常进入该.rodata节(在您的示例中不存在),该节看起来像.data但未标记为可写,因此显示为READONLY

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

objdump为使用-fPIC和不使用-fPIC生成的目标文件提供相同的输出

我的可执行目标文件的objdump中.word的地址是什么意思?

如何获得与objdump输出的标签相对应的ELF二进制文件中的文件偏移量?

在makefile中更改目标文件的输出路径

在C ++中重置输出标志

阴谋文件中的标志

填充源-目标对和列表中的标志

data16在objdump输出中是什么意思?

gcc链接带有警告/优化标志的目标文件

在文件中设置和声标志

Qmake获取目标输出文件路径

链接到ELF时,GCC输出目标文件中的行号未保留

通过csproj文件中的msbuild目标在Visual Studio 2019输出窗口中显示消息?

使用 OutDir 时,每个目标框架的子文件夹中的 MSBuild 输出

pyelftools:像objdump一样检索elf32-littlearm二进制文件的节标志

有没有办法在输出二进制文件中存储clang编译时标志?

从Objdump了解反汇编二进制文件-输出的字段是什么

如何将TestNG测试输出文件夹配置为在Maven目标文件夹中?

在SVG中应用目标输出合成

在Xcode中显示多个目标输出

什么是C中的目标文件?

ps输出中的R / D标志是什么意思?

在Python / Gurobi中关闭回调的输出标志

Sphinx不删除html输出中的doctest标志

如何在目标c中通过POST请求捕获stderr输出并将消息发送到远程日志文件?

需要帮助将源和目标端口号输出给用户,使用 Python 和 dpkt 从 pcap 文件中读取

复制目标文件夹中的文件

如何使用-fPIC标志重新编译libperl.a目标文件?

Makefile来自同一源文件的多个目标,带有不同的标志