1

(私のプロジェクトの一部として) Linux システムを持っています。そこでは、ホット コード ロードを行う必要があります。つまり、ソフトウェアの一部を無線 (WiFi 経由でソフトウェアをダウンロードするなど) または有線で更新する必要があります。 (LAN経由)。このソフトウェアには 2 つの部分があり、1 つは C++ で記述され、もう 1 つは Erlang で記述されています。C++ の部分は、TCP/IP (6 ~ 7 の奇妙な独自プロトコルのセット) を介していくつかの外部エンティティと通信します。私が主にホットロードを行う必要がある部分は、これらの外部エンティティと通信する C++ 部分です。C++ の部分はポートを介して Erlang と通信します (現在開発中) が、それを NIF に変更したいと考えています (いずれ将来的に)。

誰かが C++ 機能のホットコード ロードの戦略を提案できますか? Erlang の機能については承知していますが、機能が C++ で記述された部分に拡張されていないことを理解しています。

また、独自のプロトコル実装を含む C++ モジュールが「有効なソース」からのものであることを確認する必要があります。そのための正しい戦略は何ですか?

私の要件は珍しくないので、そのようなモジュール、フレームワーク、ライブラリが存在する場合は、それらを指摘していただければ幸いです。

4

1 に答える 1

2

このための既存のライブラリについては知りません。C/C++ でのコードのロードは、ほとんどの場合、dlopen を使用してコードからロードできる動的ライブラリを使用して行われます。次に、dlsym を使用してシンボルのアドレスを見つけることができます。C++ では名前マングリングが行われるため、シンボルを見つけるのが難しくなることに注意してください。多くの場合、extern "C" でラップされた通常の関数を作成して、他のオブジェクトと同じように使用できるオブジェクトを作成するのが最善です。

コードが有効であることを確認したい場合は、おそらく公開/秘密鍵暗号化を検討する必要があります。秘密鍵を使用してコードに署名し (基本的には、バイナリの暗号化されたハッシュを作成します)、コードをロードするソフトウェアが公開鍵を使用して署名をチェックします。

于 2011-07-08T05:38:40.393 に答える