[再印刷]アップグレードからのDLLの動作

  最近、手持ちの需要があります:DLLは永久的なプロセスに注入する必要があり、DLLが自己宣伝する能力を持って、新しいバージョンを見つけたときには、すぐに新しいロードを、自分自身を無料で利用できます。ここでは実施計画は次のとおりです

    、リスニングスレッドを開き、新しいバージョンを引っ張って、インターネットから入手可能である、あなたがアップグレードする必要が発見した場合、一時ディレクトリにダウンロードし、その後すぐに自分自身をFreeLibraryをして、更新処理を行います。
    現在のモジュールにFreeLibraryメモリ領域の後にあるので有効ではなくなるので、更新処理は、別のスレッドを使用し、コード更新されるメモリ割り当てプロセスが書き込まシェルコードの形で実施されます。更新プロセスは、いくつかのシステムAPI関数を使用しますが、そこにこれは、アクセスリストをインポートしますとして直接、関数名によって呼び出すことができず、DLL自由時間が失われました。そのため、スレッドに事前に引数を用意することにより、スレッドパラメータは、データやアドレスの一部を使用するように更新されています


    :のは、どのようにこれらのパラメータを準備するために、リスナー・スレッドの仕事と更新する方法を見てみましょう


    彼女は終了し、タイムリーにしたこと、更新スレッドを作成した後に:自分(そのスレッドが削除された、独自のを更新することができます)解放


    :次のスレッドの仕事更新する方法を見て


    、無料自身のモジュールと同様に、最後のVirtualFreeパラメータと現在のコードシェアメモリページの後、フォームのスタックパラメータを構築することで、戻って来ることができません現在のスレッドの終わり。この関数は、グローバル配列にコンパイルされたバイナリの指示を保存します。


次は(XP、Win7の32&64で試験した)効果のテストです:


最後に、注意すべきいくつかの場所があります:
1、新しいDLLをロードする前に一時ディレクトリを置きます再帰ループの更新処理を防ぐために削除されたファイルが発生します。
図2に示すように、更新プロセスは、DLLのバージョン情報を決定する必要がある実行する前に、同じプロセスが再帰を防ぐために起こります。


[お知らせ]セキュリティサービスとアウトソーシング・プロジェクトプロジェクトは、雪のエンタープライズ・サービス・プラットフォームを参照してくださいする必要があり送ってくださいます。https://qifu.kanxue.com

添付ファイル:
 

おすすめ

転載: www.cnblogs.com/h2zZhou/p/11535317.html