我编译了一个简单的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
开始?这与校准有关吗?我也注意到其他一些部分之间存在类似的差距。
答案 0 :(得分:2)
objdump -h file
输出的最后一列是该部分的对齐方式。 .fini
4
的对齐方式2**2
为2的幂,这就是为什么它从0x400574
开始而不是0x400572
。
在针对x86-64的glibc链接时,4
部分.fini
部分的 .section .fini,"ax",@progbits
.p2align 2
.globl _fini
.type _fini, @function
_fini:
对齐方式已在crti.o
中指定:
var d = new Date(); //get date
h = d.getHours(); //get hours, minutes and seconds
m = d.getMinutes();
s = d.getSeconds();
if (h < 10) { // In case an hour, a minute or a second is less than 10 (so 1 decimal),
h = "0" + h; // an extra '0' will be added.
}
if (m < 10) {
m = "0" + m;
}
if (s < 10) {
s = "0" + s;
}
if (s == 0) { // If 'seconds' is equal to zero, it'll only return the hours and minutes.
return(h + ":" + m);
} else {
return(h + ":" + m + ":" + s);
}