部分与部分?
Section vs. segment?
我已经阅读了 this post 并且我了解段包含运行时信息并封装部分,其中包含链接信息。但是,我仍然对为什么这些术语在这两本书中似乎可以互换使用感到困惑。
"The Shellcoder's Handbook"
Next, information is loaded from the program’s executable file to the
newly created address space. There are three types of segments: .text,
.bss, and .data. The .text segment is mapped as read-only, whereas
.data and .bss are writable. The .bss and .data segments are reserved
for global variables. The .data segment contains static initialized
data, and the .bss segment contains uninitialized data. The final
segment, .text, holds the program instructions.
"Professional Assembly Language"
The text section is required in all assembly language programs. It is
where the instruction codes are declared within the executable program.
The data and bss sections are optional, but often used within a
program. The data section declares data elements that are declared
with an initial value. These data elements are used as variables within
the assembly language program. The bss section declares data elements
that are instantiated with a zero (or null) value. These data elements
are most often used as buffer areas within the assembly language
program.
在 ELF 的上下文中,它们是两个不同的相关事物。
段在程序中描述header。松散地,每个段描述了当 executable 为 运行.
时要加载到内存中的文件块
部分在部分 header 中进行了描述。松散地,每个部分描述了与程序相关的一大块数据。
所以部分和段都是文件的块,描述为偏移量和大小(尽管在这两种情况下大小都可能为 0,在这种情况下偏移量将被忽略)。任何给定的 ELF 文件可能只有段,或者只有节,或者既有段又有节。为了执行 executable 它必须有要加载的段。为了可链接,它必须有描述什么在哪里的部分。
动态链接的 executable 必须有段,但段仍然是可选的:有一个 PT_DYNAMIC
段(见 this)表示 [=11= 的内容] 部分。这样动态链接器还是可以找到符号table.dynsym
.
的偏移量
一般来说,段之间不会相互重叠,段之间也不会相互重叠,但段可能描述的数据是段的一部分(或全部)。这不是格式的严格要求,但违反了就奇怪了。一个段描述两个不同段的数据也会很奇怪。还有(通常)不属于任何段的部分。
我已经阅读了 this post 并且我了解段包含运行时信息并封装部分,其中包含链接信息。但是,我仍然对为什么这些术语在这两本书中似乎可以互换使用感到困惑。
"The Shellcoder's Handbook"
Next, information is loaded from the program’s executable file to the newly created address space. There are three types of segments: .text, .bss, and .data. The .text segment is mapped as read-only, whereas .data and .bss are writable. The .bss and .data segments are reserved for global variables. The .data segment contains static initialized data, and the .bss segment contains uninitialized data. The final segment, .text, holds the program instructions.
"Professional Assembly Language"
The text section is required in all assembly language programs. It is where the instruction codes are declared within the executable program. The data and bss sections are optional, but often used within a program. The data section declares data elements that are declared with an initial value. These data elements are used as variables within the assembly language program. The bss section declares data elements that are instantiated with a zero (or null) value. These data elements are most often used as buffer areas within the assembly language program.
在 ELF 的上下文中,它们是两个不同的相关事物。
段在程序中描述header。松散地,每个段描述了当 executable 为 运行.
时要加载到内存中的文件块部分在部分 header 中进行了描述。松散地,每个部分描述了与程序相关的一大块数据。
所以部分和段都是文件的块,描述为偏移量和大小(尽管在这两种情况下大小都可能为 0,在这种情况下偏移量将被忽略)。任何给定的 ELF 文件可能只有段,或者只有节,或者既有段又有节。为了执行 executable 它必须有要加载的段。为了可链接,它必须有描述什么在哪里的部分。
动态链接的 executable 必须有段,但段仍然是可选的:有一个 PT_DYNAMIC
段(见 this)表示 [=11= 的内容] 部分。这样动态链接器还是可以找到符号table.dynsym
.
一般来说,段之间不会相互重叠,段之间也不会相互重叠,但段可能描述的数据是段的一部分(或全部)。这不是格式的严格要求,但违反了就奇怪了。一个段描述两个不同段的数据也会很奇怪。还有(通常)不属于任何段的部分。