Linuxでvdsoを生成する[閉じる]

Linuxでvdsoを生成する[閉じる]

私は現在独自の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は、ユーザースペースで処理できる呼び出しにのみ実際に役立ちます。

おすすめ記事