Linux에서는 프로세스 스택이 포함된 메모리 페이지를 디스크로 교체할 수 있습니까? 그렇다면 컴파일 타임이나 런타임에 이런 일이 발생하지 않도록 하는 방법이 있습니까?
GitHub에 관한 스레드가 있기 때문에 이 질문을 합니다.스택의 로컬 변수에서 비밀이 유출될 수 있음
이 질문에 대한 대답이 커널뿐만 아니라 사용된 사용자 공간 도구 체인(libc, 동적 링커 등)에 따라 달라지는 경우 내 질문은 특히 GNU/Linux 및 Android에 관한 것입니다.
답변1
Linux에서는 힙과 스택을 포함하여 프로세스의 거의 모든 메모리를 교체할 수 있습니다.
그러나 메모리 페이지는 교체할 수 없도록 물리적 RAM에 잠길 수 있습니다. 이는 다음을 사용하여 수행됩니다.mlock
시스템 호출(또는 mlockall
프로세스의 모든 메모리 잠금) 이는 권한 있는 작업이므로 프로세스에 적절한 기능이 있어야 합니다 CAP_IPC_LOCK
( gnome-keyring-daemon
예: 참조 /sbin/getcap /usr/bin/gnome-keyring-daemon
).