我在vdso中看到所有函数都标记为STT_FUNC而不是STT_GNU_IFUNC。 特别是我知道“gettimeofday”是一个Ifunc。
VDSO中的所有函数都是Ifuncs,所以它们没有被标记为是吗? 如果不是 - 为什么这些函数不被标记为Ifuncs?
在Ubuntu上查看以下内容:
root@host:# objdump -T /lib/modules/3.13.0-32-generic/vdso/vdso.so
/lib/modules/3.13.0-32-generic/vdso/vdso.so: file format elf64-x86-64
DYNAMIC SYMBOL TABLE:
ffffffffff700354 l d .eh_frame_hdr 0000000000000000 .eh_frame_hdr
ffffffffff700700 w DF .text 00000000000005ad LINUX_2.6 clock_gettime
0000000000000000 g DO *ABS* 0000000000000000 LINUX_2.6 LINUX_2.6
ffffffffff700cb0 g DF .text 00000000000002e5 LINUX_2.6 __vdso_gettimeofday
ffffffffff700fc0 g DF .text 000000000000003d LINUX_2.6 __vdso_getcpu
ffffffffff700cb0 w DF .text 00000000000002e5 LINUX_2.6 gettimeofday
ffffffffff700fa0 w DF .text 0000000000000016 LINUX_2.6 time
ffffffffff700fc0 w DF .text 000000000000003d LINUX_2.6 getcpu
ffffffffff700700 g DF .text 00000000000005ad LINUX_2.6 __vdso_clock_gettime
ffffffffff700fa0 g DF .text 0000000000000016 LINUX_2.6 __vdso_time