2011-08-06 3 views
1

これで、プロセスとそのmm_structにアクセスできるとします。マッピングの1つを変更したり、マッピングを削除して一時的なものを作成する方法があります。私はページよりも小さな量を割り当てて、それにメモリを書き込むことができますか?Linuxカーネルのユーザープロセスのページマッピングを変更する

たとえば、ADD命令でエラーを処理します。私は、比較的容易に障害のアドレスとサイズを得ることができます。私は8バイトをローカルに割り当て(最大の単一命令サイズ)、マッピングを混乱させ、フォールトした仮想アドレスがそれらの8バイトの最初のバイトを指し示すようにします。次に、別のページを対象としたデータを取得し、元のページをマッピングに戻すよう指示します。私は、ページ以外のものがプロセスの仮想メモリ領域で使用できるかどうかについて興味があります。

答えて

2

コンピュータの基礎となるアーキテクチャは、仮想メモリでできることとできないことを定義します。あなたのアーキテクチャは指定されていませんが、ページよりも小さなユニットを管理することはできません。

しかし、より大きな問題に対処するには、メモリサイズはどうして重要ですか?この割り当てはスレッドごとに1回必要で、障害が発生している場合にのみ必要で、単一のユーザー空間命令に割り当てられます。新しいクリーンなページを使用して、プロセスに一時的にマップして、書面による価値を得るだけです。たぶん書きやすく、セキュリティが強化されているため、信頼できない(明らかに欠陥のある)アプリケーションにカーネルデータが公開されることはありません。

+0

メモリオーバーヘッドがそれほど多くないため、ページサイズはわずか4,8kですが、最初の8バイトしか使用しません。 sidenoteとして、(カーネル空間から明らかに)ユーザ空間命令を単一ステップで実行する最も簡単な方法を知っていますか? –

+0

@Jesus:私は正確には分かりませんが、私は['ptrace()'](http://linux.die.net/man/2/ptrace)で使われているコードを見て、 PTRACE_SINGLESTEP'リクエスト。 – Karmastan

関連する問題