2016-05-09 10 views
1

私は現在、GLib g_module関数を使用して、実行時にいくつかの共有オブジェクトをロードしています。共有オブジェクトをロードするためのフェイルセーフ方法

私が使用する基本的な方法は以下の通りです:

  1. コールg_module_openモジュールにその後
  2. を得るために、私がしたようg_module_symbol

を使用してg_module_make_resident

  • シンボルの読み込みを呼び出しますこれをプラグインの互換性を追加するための基本的な方法として使用すると、ロードされたモジュールにバグがあってもメモリ破損(malloc/free))メインアプリケーションは、すべてをクラッシュせずにこのエラーを「キャッチ」できますか?これをachiveするための良い方法があれば

    は、私は本当に

  • +2

    共有ライブラリはプロセスのアドレス空間にロードされます。したがって、実際に共有ライブラリ –

    +0

    のバグからプロセスを分離することはできません。これは悲しいことですが、とにかくありがとうございます;)これを答えにしてください... – mame98

    答えて

    2

    セヴェリンが述べたように、あなたが簡単に何かできることは本当にありません...私は興味を持って、あなたが任意のコードを記述する必要はありません。つまり、あなたはいくつかの選択肢があります:

    libpeasのようなものを使って、非Cリンケージ(JavaScript、Pythonなど)でプラグインを読み込むことができます。これらの言語の多くはCよりもはるかに安全です。悪意のあるモジュールとは対照的にプログラマーのエラーから保護しようとするなら、これは良い方法です。

    他の比較的簡単な方法は、各プラグインを別のプロセスで実行することです。 D-Bus、パイプなどを介して通信することができます。このアプローチの利点の1つは、一部のモジュールのアクセス権が少なくて済むことです。 root権限が必要なハードウェアと対話するプログラムを持っていても、そのUIは依然として特権のないユーザーとして実行される可能性があります。テレパシーは、この種のアーキテクチャの一例です。

    関連する問題