리눅스에서 vdso 생성 [닫기]

리눅스에서 vdso 생성 [닫기]

저는 현재 자체 VDSO를 구현하려고 합니다. 나는 보았다이 튜토리얼이를 수행하는 방법이 설명되어 있습니다.

하지만 이 튜토리얼은 Linux 2.6.x용으로 작성되었으며 Linux 4.8.x에서 사용하고 싶습니다. 그러나 vdso의 아키텍처 구조는 해당 버전 이후로 많이 변경되었으며(예: vextern.h가 억제됨) 제대로 작동하도록 조정하는 방법을 모르겠습니다.

최신 커널에서 작동하도록 이 튜토리얼을 어떻게 적용할 수 있는지 아시나요? 아니면 내 자체 구현에 필요한 vdso에 대한 충분한 리소스를 어디에서 찾을 수 있나요?

또한 임의 시스템 호출의 동작을 VDSO로 간단히 재현할 수 있는지 알고 계십니까? 나는 이것이 보안 관점에서 매우 나쁜 생각이라는 것을 알고 있습니다(그리고 성능 향상은 무시할 수 있습니다).

답변1

동일한 스타일의 업데이트된 튜토리얼이 있는지 확실하지 않지만 변경 사항은 제한되어 있습니다.

  • arch/x86/vdso이동 arch/x86/entry/vdso; 이동
  • 변수 선언이 완료되었습니다.크게 단순화됨.

arch/x86/include/asm/vvar.h후자는 매크로를 사용하여 고정된 오프셋에서 변수를 한 번만 선언 하면 된다는 의미입니다 DECLARE_VVAR. 이를 정의하려면 DEFINE_VVAR매크로를 사용하여 액세스하고 VVAR매크로를 사용하십시오. 위의 링크에는 많은 예제가 있습니다(기존의 모든 공유 변수 사용).

적어도 커널 모드에서 커널을 호출할 때는 vDSO에서 임의 시스템 호출의 동작을 재현할 수 없습니다. vDSO는 사용자 공간에서 처리할 수 있는 호출에만 실제로 유용합니다.

관련 정보