vdso gettimeofday with 64 bit kernel&应用程序编译为32位

时间:2016-08-17 04:02:57

标签: c linux-kernel glibc gettimeofday vdso

对于32位应用程序,

支持vdso,该应用程序在带有glibc版本2.15的64位内核上运行。如果是,我如何使它适用于在64位内核上运行的32位应用程序。因为即使dlopen on“linux-vdso.so.1”成功,“__vdso_gettimeofday”上的dlsym也会失败。

在同一个系统上,我可以在“linux-vdso.so.1”上执行一个dlopen&来自为64位编译的应用程序中的“__vdso_gettimeofday”的dlsym。

1 个答案:

答案 0 :(得分:0)

在我的64位Linux 4.4.15上,32位vdso具有以下符号:

readelf -Ws vdso32

Symbol table '.dynsym' contains 9 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 00000ce0     9 FUNC    GLOBAL DEFAULT   12 __kernel_sigreturn@@LINUX_2.5
     2: 00000d00    13 FUNC    GLOBAL DEFAULT   12 __kernel_vsyscall@@LINUX_2.5
     3: 00000ad0   438 FUNC    GLOBAL DEFAULT   12 __vdso_gettimeofday@@LINUX_2.6
     4: 00000c90    42 FUNC    GLOBAL DEFAULT   12 __vdso_time@@LINUX_2.6
     5: 00000770   853 FUNC    GLOBAL DEFAULT   12 __vdso_clock_gettime@@LINUX_2.6
     6: 00000cf0     8 FUNC    GLOBAL DEFAULT   12 __kernel_rt_sigreturn@@LINUX_2.5
     7: 00000000     0 OBJECT  GLOBAL DEFAULT  ABS LINUX_2.5
     8: 00000000     0 OBJECT  GLOBAL DEFAULT  ABS LINUX_2.6

这表明您正在寻找的__vdso_gettimeofday已添加到内核2.6中,并且您的内核版本较旧。