4

私は Windows での開発経験が本当に不足しており、明らかなことを見逃している可能性があります。落ち着いてください :)

.dll独自のパスからいくつかの s を使用するアプリケーション (Qt C++) があります(これら.dllの s を .exe と共に配信することを意味します)。アプリを配信するときに、upxを介して dll を圧縮します。それらは劇的に圧縮され、解凍せずにそれらを使用できますdll

私は何か間違ったことをしているような印象を受けますが、それは偶然に機能するだけなので、圧縮された dll を使用しても問題ないか確認したかったのです。それとも、いつでも予測できない問題が発生することを予期する必要がありますか? (これが主な質問です

圧縮モードで s を使用できる場合.dll、そもそも圧縮されていないのはなぜですか。

4

1 に答える 1

7

これは「偶然に機能する」ものではありません。UPX は、実行可能ファイルであろうと DLL であろうと、Win32-PE (および他の多くの形式) を圧縮することを目的としています。

「いいですか?」に関しては。ええ、もちろん、他人のライセンスに違反しない限り、それは「OK」です。これは、Qt に関連するもので発生する可能性はほとんどありませんが、原則として発生する可能性があります。たとえば、 「バイナリ形式での配布、何とか何とか、変更は許可されていません」などのライセンス条項を持ついくつかのDLLを使用している可能性があります。たとえば、MSVC や DirectX の再配布可能ファイル、またはグラフィック カード ベンダーの独自の API などです。いずれにせよ、このことを念頭に置き、違反する前にライセンスを確認することは間違いではありません。

「大丈夫ですか?」という質問の言葉遣い 少し違う:「それは賢いですか?」、答えは次のとおりです。おそらくそうではありません。通常、ディスク上の数メガバイトの余分な量はあまり問題になりません。すべてをインストーラーにパックし、ユーザーがそれをインターネット経由でダウンロードすると、データはとにかく圧縮されるので、その点では同じです。

ただし、UPX または別の実行可能パッカーを使用するか、Windows のファイルシステム圧縮を使用するかに関係なく、圧縮には副作用があります。これにより、追加のアドレス空間の断片化が発生し、非同期転送が無効になり、ワーキング セットの DLL からページを破棄し、アクセス時に PE イメージからそれらを透過的に再ロードするオペレーティング システムの機能が失われます。

この最後の文は、オペレーティング システムがページ ファイルに割り当てを行う必要があり、プロセスのワーキング セットを移動して別の場所を確保するときに、ページ ファイルにページを書き込む必要があることを意味します。他に方法はありません。ユーザーがページファイルを無効にした場合はどうなりますか...

于 2013-01-23T15:31:33.197 に答える