私は現在独自のVDSOを実装しようとしています。私は見たこのチュートリアルこれを行う方法について説明します。
しかし、このチュートリアルはLinux 2.6.x用に書かれており、Linux 4.8.xで使用したいと思います。しかし、vdsoのアーキテクチャ構造はそのバージョン以降に大幅に変更されており(例:vextern.hが抑制されている)、正しく機能するように調整する方法がわかりません。
最新のカーネルで動作するようにこのチュートリアルをどのように適用できるかをご存知ですか?それとも、自分の実装に必要なvdsoの十分なリソースをどこで見つけることができますか?
また、任意のシステムコールの動作をVDSOで簡単に再現できるかどうかご存知ですか?私はこれがセキュリティの観点から非常に悪い考えであることを知っています(そしてパフォーマンスの向上は無視できます)。
答え1
同じスタイルの更新されたチュートリアルがあるかどうかはわかりませんが、変更は制限されています。
arch/x86/vdso
移動arch/x86/entry/vdso
移動- 変数宣言が完了しました。大幅に簡素化。
arch/x86/include/asm/vvar.h
後者は、マクロを使用して固定オフセットで変数を一度宣言するだけですDECLARE_VVAR
。これを定義するには、DEFINE_VVAR
マクロを使用してアクセスし、VVAR
マクロを使用します。上記のリンクには多くの例があります(既存のすべての共有変数を使用)。
少なくともカーネルモードでカーネルを呼び出すと、vDSOで任意のシステムコールの動作を再現することはできません。 vDSOは、ユーザースペースで処理できる呼び出しにのみ実際に役立ちます。