2011-07-08 15 views
1

私はホットコードローディングをしなければならないかもしれないLinuxシステム(私のプロジェクトの一環として)を持っています。ソフトウェアの一部を更新する、無線でダウンロードする(無線でソフトウェアをダウンロードする)、または無線で(LAN上で)ダウンロードすることができます。このソフトウェアの2つの部分があります.1つはC++で書かれていて、もう1つはErlangです。 C++の部分は、TCP/IP(6〜7個の奇妙なプロプライエタリプロトコルのセット)を介していくつかの外部エンティティと通信します。私が大部分のホットローディングを行う必要がある部分は、それらの外部エンティティと会話するC++の部分です。 C++の部分では、ポート(現在開発中)を介してErlangに話していますが、それをNIFに変更したいと考えています(将来はいつか)。無線で/ Over-the-Wire自動化されたソフトウェアアップデート(ホットコードローディング)戦略

誰かがC++機能のホットコードローディングに関するいくつかの戦略を提案できますか?私はErlangの能力について認識していますが、私の理解は、この機能がC++で書かれた部分にまで拡張されていないことです。

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

私の要件は珍しいことではないので、そのようなモジュール、フレームワーク、ライブラリが存在する場合は、その要件を指摘することができます。

答えて

2

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

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

関連する問題