プロセスが mmu なしで Linux で実行されているかどうかを確認できる、信頼性が高く目立たないランタイム チェックを探しています。邪魔にならないということは、プロセス状態への副作用が最小限またはまったくないことを意味します。たとえば、EINVAL
から取得fork
することは 1 つの指標ですが、テストが失敗した場合は子プロセスが作成されます。障害を発生させて信号をキャッチしようとする試みは、グローバルな信号配置の変更を伴うため、問題外です。それらがマウントされていない/表示されていない可能性があるため(名前空間内またはマウント名前空間など)、信頼できないものが/proc
あります。/sys
chroot
mprotect
withの失敗はENOSYS
信頼できるようであり、テスト ページをマップして試行する必要がある以外に、副作用なしで実行できます。しかし、これに頼って安全かどうかはわかりません。
これを行うためのより良い/推奨される方法はありますか?
誰かが前提に異議を唱え、これがコンパイル時に静的に知られていると答えようとする前に、いいえ、そうではありません。アーキテクチャの mmu-ful バリアントと mmu-less バリアントの両方でサポートされる ISA レベルの位置に依存しない実行可能ファイルをビルドすると仮定すると、どちらでも実行できます。(私は、この作業を行ったカーネル コミットの作成者です。)