%gs 레지스터의 용도는 무엇입니까?

%gs 레지스터의 용도는 무엇입니까?

%gs 레지스터에 대해 내가 찾을 수 있는 정보는 그것이 >32비트 x86 아키텍처에서 자유롭게 사용할 수 있는 레지스터인 것처럼 보인다는 것입니다. 시스템 호출 전에 gs_change가 실행되는 것 같습니다. 이 레지스터가 어떻게 사용되는지에 대한 문서를 알려줄 수 있는 사람이 있나요?— 커널/사용자 모드 전환을 위한 레지스터라고 가정하겠습니다.

내 질문의 배경은 커널 스택 추적과 정확히 무슨 일이 일어나고 있는지 이해하려고 노력하고 있다는 것입니다.

스택 추적은 도착하는 새로 고침 프로세스에서 생성됩니다 /proc/sys/kernel/hung_task_timeout_secs.

답변1

%gsx86 Linux 커널의 GCC'c 스택 보호 기능을 위해 예약된 것으로 보입니다.CONFIG_CC_STACKPROTECTOR설정을 위해 활성화스택 카나리아. 다음에서 몇 가지 설명을 확인할 수 있습니다.아치/x86/include/asm/stackportector.h.

답변2

여기에 설명된 대로:

https://lists.archive.carbon60.com/linux/kernel/970025

그리고 여기:

https://bromiumlabs.wordpress.com/2015/02/02/exploiting-badiret-vulnerability-cve-2014-9322-linux-kernel-privilege-escalation/

GS 레지스터는 관련 논리 주소 구성 요소를 추가한 후 사용자 모드와 커널 모드의 주소 범위를 구별하는 데 사용됩니다.

swapgs 명령은 GS 레지스터를 MSR 값으로 교환하는 데 사용되며 이 작업은 특권 모드에서만 수행될 수 있습니다.

예를 들어 커널 모드 메모리를 사용하려면 IDT 핸들러 시작 중과 이후에 항상 swapgs를 수행해야 합니다.

관련 정보