2016-10-08 4 views
2

Windows CE 5.0ベースの製品にOpenSSLを追加するよう依頼されました。 FIPSモードで動作させるにはOpenSSLが必要です.FIPSモードでは、ライブラリのコンパイル時に既知のアドレスが必要です。 EXEをビルドすれば問題はありません。なぜなら、FIPSモードチェックがEXEの検証に使用するEXEのベースアドレスを常に0x10000に頼ることができるからです。windows ce 5.0 dll - 固定アドレスですか?

問題は、他のDLLを呼び出すメインアプリケーションEXEによって呼び出される別のDLLから呼び出されるDLLにOpenSSLコードを組み込む必要があることです。どうすれば私のDLLランタイムのアドレスを知ることができますか?

この作業をすべて行う方法が分かっている唯一の方法は、問題のDLLがメッセージボックスをポップアップするか、またはその機能の1つのアドレスをディスクに書き込んで、マップファイルのオフセットと比較できるかどうかですそのDLLをビルドしてDLLのベースアドレスを取得したときです。そのアドレスに戻り、OpenSSLのものを再構築してから、DLLを再構築してすべて動作させることができます。 FIPSモードは、コンパイル時に指定されたアドレスが使用中ランタイムのアドレスであるため、有効になります。

これは問題を解決するようですが、他のDLLが変更されたり、このDLLが変更されてコードが追加または削除されたりすると、このベースアドレスが変更される可能性はありません。しかし、私はすべてが静的である限り、このアプローチは大丈夫かもしれないと思います。

私の質問:

は、実行時にロードされたDLLのアドレスを修正する方法はありますか?またはBIBとROMは私のここの唯一のオプションですか?別のことをやっているかどうかをもう一度確認したい。私のEXEで使用されるDLLが変更されたり、EXEが多かれ少なかれDLLを使用するように変更された場合、DLLのロードアドレスが変更され、FIPSモードが無効になるため、OpenSSLライブラリを再構築する必要があります新しいベースアドレスを作成してから、DLLを再構築して作業を再開します。私はDLLからそのOpenSSLライブラリコードを実行している間にそれを避けようとしていますが、それが可能かどうかはわかりません。 CE 5.0から離れることを除いて、推奨事項はありますか?どうも。

答えて

1

あなたはthe /BASE linker optionを使用することができるはずです。

/(0x10000000で)DLL(...)のデフォルトの場所 をオーバーライドし、プログラムのベースアドレスを設定します BASE。オペレーティングシステムは、最初に指定されたまたはデフォルトのベースアドレスにプログラムをロードしようとします。そこに十分なスペースがない場合、システムはプログラムを再配置します。再配置を防止するには、/ FIXEDオプションを使用します。

どんな理由であれ、/ BASEオプションが動作しない、場合は、代替が別々のOpenSSL exeファイルを実行すると、OpenSSLのプロセスと通信するようにクライアントを有効にするために、プロキシDLLを提供することができます。

+0

ありがとうございました。私はすでにこれらのオプションを試しましたが、アドレスは変わりません。私はプロキシメソッドを避けることを望んでいたが、私はここで私のオプションの他のオプションかもしれないと思う。 – user3709414

関連する問題