scd*_*dmb 11 linux elf objdump
在某些目标文件上有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
Run Code Online (Sandbox Code Playgroud)
这些标志CONTENTS,ALLOC,LOAD等是什么意思?
Hri*_*iev 23
您看到的是对目标文件中每个部分的ELF段标志,节类型和节标志的组合的解释.
LOAD
表示该部分驻留在可加载段中,即在创建进程时可以将其内容从文件读入内存Section V 标志在System V Application Binary Interface 的第4章中有详细记录,尽管名称与objdump
显示的名称略有不同.
CODE
表示该部分包含可执行代码; 它由SHF_EXECINSTR
节标题中的标志表示DATA
表示该部分不可执行但可写,由SHF_WRITE
标志的存在表示READONLY
表示该部分既不可执行也不可写,应放在只读存储器页面中ALLOC
表示该部分占用存储器,例如,存储页面实际上被分配用于在创建进程时保持部分内容,由SHF_ALLOC
标志指示.某些部分(例如包含调试信息的部分)在正常程序执行期间不会被读入内存,也不会被标记为ALLOC
节省内存.类型的部分SHT_PROGBITS
在文件中具有相应的内容并显示为CONTENTS
.某些部分在文件中没有相应的内容,例如类型的.bss
部分SHT_NOBITS
.
该.text
部分包含程序可执行代码.它显示为CONTENTS
因为它是类型SHT_PROGBITS
.应该为此部分保留内存,因为它ALLOC
应该从文件中加载,因为它放在一个LOAD
可用的段中.程序代码通常是不可修改的,因此该部分放在只读存储器中.它包含要执行的指令,因此包含CODE
标志.
具有静态存储类的初始化变量将进入该.data
部分.它们的初始值存储在文件中,并在创建过程时从那里读取.在C/C++中,这些是全局变量,静态局部变量和适当初始化的C++静态成员变量,例如static int a = 10;
.Fortran放置了初始化的SAVE
-d变量和COMMON
块,这些变量和块在那里给出了一个带有块DATA
语句的intiial值.
该.bss
部分(历史名称,由Symbol开始的缩写)是最简单的部分.它包含静态存储类的未初始化变量.它是一个类型的部分,SHT_NOBITS
在文件中不占用空间.内存是ALLOC
为它准备的,但没有从文件中读取任何内容以预先填充内存 - 它只是保留内核内存分配器提供的全零.
常量通常会进入.rodata
部分(在您的示例中不存在),它看起来像.data
但没有标记为可写,因此显示为READONLY
.
查了一些资料Ubuntu elf man page
,这只是我的理解。
我认为它们是来自 和 的program header
信息section header
。
LOAD: may correspond to PT_LOAD in the Program header table. Brief description:
It specifies the type of that particular element in the program header table.
The array element specifies a loadable segment
ALLOC: may correspond to SHF_ALLOC in the section table. Brief description:
Its specifies the flag of that particular element in the section header.
This section occupies memory during process execution.
CODE/ DATA: indicates the belonging segment
READONLY: specifies a read-only segment
CONTENTS: I didn't find anything to conclude.
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
归档时间: |
|
查看次数: |
7095 次 |
最近记录: |