ELF文件格式的段和段有什么区别?
从维基可执行和可链接格式:
段包含文件的运行时执行所必需的信息,而段包含链接和重定位的重要数据。整个文件中的任何字节可以由最多一个部分拥有,并且可以存在不属于任何部分的孤立字节。
The segments contain information that is necessary for runtime execution of the file, while sections contain important data for linking and relocation. Any byte in the entire file can be owned by at most one section, and there can be orphan bytes which are not owned by any section.
但是段和段之间有什么区别?
在可执行的ELF文件中,段是否包含一个或多个段?
But what's difference between section and segment? In an executable ELF file, does a segment contain one or more sections?
但是段和段之间有什么区别?
But what's difference between section and segment?
正是你引用的内容:段包含运行时需要的信息,而这些部分包含信息
Exactly what you quoted: the segments contain information needed at runtime, while the sections contain information needed during linking.
分段是否包含一个或多个节?
does a segment contain one or more sections?
细分可以包含0个或多个部分。示例:
A segment can contain 0 or more sections. Example:
readelf -l /bin/date
Elf file type is EXEC (Executable file)
Entry point 0x402000
There are 9 program headers, starting at offset 64
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
PHDR 0x0000000000000040 0x0000000000400040 0x0000000000400040
0x00000000000001f8 0x00000000000001f8 R E 8
INTERP 0x0000000000000238 0x0000000000400238 0x0000000000400238
0x000000000000001c 0x000000000000001c R 1
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000
0x000000000000d5ac 0x000000000000d5ac R E 200000
LOAD 0x000000000000de10 0x000000000060de10 0x000000000060de10
0x0000000000000440 0x0000000000000610 RW 200000
DYNAMIC 0x000000000000de38 0x000000000060de38 0x000000000060de38
0x00000000000001a0 0x00000000000001a0 RW 8
NOTE 0x0000000000000254 0x0000000000400254 0x0000000000400254
0x0000000000000044 0x0000000000000044 R 4
GNU_EH_FRAME 0x000000000000c700 0x000000000040c700 0x000000000040c700
0x00000000000002a4 0x00000000000002a4 R 4
GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
0x0000000000000000 0x0000000000000000 RW 8
GNU_RELRO 0x000000000000de10 0x000000000060de10 0x000000000060de10
0x00000000000001f0 0x00000000000001f0 R 1
Section to Segment mapping:
Segment Sections...
00
01 .interp
02 .interp .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame
03 .ctors .dtors .jcr .dynamic .got .got.plt .data .bss
04 .dynamic
05 .note.ABI-tag .note.gnu.build-id
06 .eh_frame_hdr
07
08 .ctors .dtors .jcr .dynamic .got
这里, PHDR
段包含0个部分, INTERP 段包含 .interp
部分,第一个 LOAD
段包含一大堆部分。
Here, PHDR
segment contains 0 sections, INTERP
segment contains .interp
section, and the first LOAD
segment contains a whole bunch of sections.