Linux
堆棧是否可以在 Linux 上交換到磁碟並且可以防止
在 Linux 上,是否有可能將包含程序堆棧的記憶體頁面交換到磁碟?如果是這樣,有沒有辦法在編譯時或執行時防止這種情況發生。
我之所以問,是因為在 GitHub 上討論了可能從堆棧上的局部變數中洩露秘密
如果該問題的答案不僅取決於核心,還取決於使用的使用者空間工具鏈(libc、動態連結器等),我的問題尤其是關於 GNU/Linux 和 Android。
在 Linux 上,(幾乎)程序的所有記憶體都可以換出,包括它的堆和堆棧。
但是,可以將記憶體頁面鎖定到物理 RAM 中,這樣它們就不能被換出。這是使用
mlock
系統呼叫完成的(或mlockall
鎖定所有程序的記憶體)。這是一項特權操作,因此該程序需要具有適當的能力,CAP_IPC_LOCK
(參見gnome-keyring-daemon
範例:)/sbin/getcap /usr/bin/gnome-keyring-daemon
。