.text 和 .fini 数据段之间为空 space?
Empty space between .text and .fini data segments?
我编译了一个简单的 C 程序 (gcc -o file file.cpp
) 并在 运行 objdump -h file
,
上获得了以下输出
12 .text 00000172 0000000000400400 0000000000400400 00000400 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
13 .fini 00000009 0000000000400574 0000000000400574 00000574 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
我有一个简短的问题。
为什么.text
段后有2个字节的空隙? 0x400400 + 0x172 = 0x400572
,但是 .fini
部分是从 0x400574
开始的?这跟对齐有关系吗?我也注意到其他一些部分之间存在类似的差距。
objdump -h file
输出的最后一列是该部分的对齐方式。 .fini
的对齐方式是 4
(2**2
是 2 的 2 次方),这就是为什么它从 0x400574
而不是 0x400572
开始的原因。
针对 x86-64 的 glibc 进行链接时,.fini
部分的 4
对齐在 crti.o
:
中指定
.section .fini,"ax",@progbits
.p2align 2
.globl _fini
.type _fini, @function
_fini:
我编译了一个简单的 C 程序 (gcc -o file file.cpp
) 并在 运行 objdump -h file
,
12 .text 00000172 0000000000400400 0000000000400400 00000400 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
13 .fini 00000009 0000000000400574 0000000000400574 00000574 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
我有一个简短的问题。
为什么.text
段后有2个字节的空隙? 0x400400 + 0x172 = 0x400572
,但是 .fini
部分是从 0x400574
开始的?这跟对齐有关系吗?我也注意到其他一些部分之间存在类似的差距。
objdump -h file
输出的最后一列是该部分的对齐方式。 .fini
的对齐方式是 4
(2**2
是 2 的 2 次方),这就是为什么它从 0x400574
而不是 0x400572
开始的原因。
针对 x86-64 的 glibc 进行链接时,.fini
部分的 4
对齐在 crti.o
:
.section .fini,"ax",@progbits
.p2align 2
.globl _fini
.type _fini, @function
_fini: