2016-08-17 10 views
0

은 glibc 버전 2.15가 적용된 64 비트 커널에서 실행되는 32 비트 응용 프로그램에 대해 vdso가 지원됩니다. 그렇다면 64 비트 커널에서 실행되는 32 비트 응용 프로그램에서 어떻게 작동하게합니까? 왜냐하면 "linux-vdso.so.1"의 dlopen이 성공하더라도 "__vdso_gettimeofday"의 dlsym은 실패합니다.32 비트 용으로 컴파일 된 64 비트 커널 및 응용 프로그램이 포함 된 vdso gettimeofday

동일한 시스템에서 "linux-vdso.so.1"에 dlopen을 수행 할 수 있습니다. 64 비트 용으로 컴파일 된 응용 프로그램에서 "__vdso_gettimeofday"에 & dlsym을 dl합니다.

+0

32 비트 커널에 대한 Vdso 지원이 나중에 추가되었습니다. 커널 버전을 확인하십시오. –

+0

@rakib 제 커널은 64 비트입니다, ** 어플리케이션은 32 비트입니다 **. 동일한 커널의 질문에서 언급했듯이 64 비트 용으로 컴파일 된 응용 프로그램은 vdso를 지원하는 것 같습니다. – user3465381

답변

0
64 비트 리눅스 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 [email protected]@LINUX_2.5 
    2: 00000d00 13 FUNC GLOBAL DEFAULT 12 [email protected]@LINUX_2.5 
    3: 00000ad0 438 FUNC GLOBAL DEFAULT 12 [email protected]@LINUX_2.6 
    4: 00000c90 42 FUNC GLOBAL DEFAULT 12 [email protected]@LINUX_2.6 
    5: 00000770 853 FUNC GLOBAL DEFAULT 12 [email protected]@LINUX_2.6 
    6: 00000cf0  8 FUNC GLOBAL DEFAULT 12 [email protected]@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에 추가되었습니다 찾고있는 제안을하고, 그 커널 버전이 오래되었습니다.

+0

내 커널은 3.4.91입니다. 이 vdso32 무엇을 여기에 표시했는지 설명 할 수 있습니까? – user3465381

+0

http://www.trilithium.com/johan/2005/08/linux-gate/를 사용하여 실행중인 프로세스에서 vdso32를 추출했습니다. –