상황은 다음과 같습니다 : 나는 github에서 커널을 해킹하는 project을하려고합니다. 커널 버전은 linux-3.18.6입니다. QEMU는 환경을 시뮬레이트하는 데 사용됩니다. 내 응용 프로그램에서 나는 그들을 따라가 syscall 프로 시저를 이해하려고 시도합니다. 내 목표를 완료하는 방법은 쉘 프로그램과 같습니다. 상대 시스템 호출을 실행하기위한
은 glibc 버전 2.15가 적용된 64 비트 커널에서 실행되는 32 비트 응용 프로그램에 대해 vdso가 지원됩니다. 그렇다면 64 비트 커널에서 실행되는 32 비트 응용 프로그램에서 어떻게 작동하게합니까? 왜냐하면 "linux-vdso.so.1"의 dlopen이 성공하더라도 "__vdso_gettimeofday"의 dlsym은 실패합니다. 동일한 시스
커널에 vdso = 0을 전달하면이 기능이 꺼지고 glibc의 동적 링커가 커널에서 vdso 기능을 자동으로 감지하여 사용할 수 있다는 것을 알고 있습니다. 여기에서 나는이 문제를 만났다. RHEL 5.6 상자 (커널 2.6.18-238.el5)는 필자의 기관에서 보통 사용자 만 액세스 할 수 있으며 아마도 RHEL bug 673616을 앓고있을 것입니다.
나는 syscalls이 사용 된 것을 확인하기 위해 많은 커널 시간을 트리거하는 자바 프로세스를 strace'd했으며, 을 고려하면 이상한 gettimeofday()과 clock_gettime()이 지배적 인 것으로 나타났다. 상태 : strace (1)을 사용하여 추적 시스템을 호출하면 vDSO에서 내 보낸 심볼 (시스템 호출)이 추적 출력에 나타나지 않