4GBより大きい.exeを実行することは可能ですか?


10

警告なしに、7-Zipで> 4GB SFXアーカイブ(自己解凍アーカイブ)を作成しました。受信者がそれを抽出しようとしたときに、次のエラーリボンが表示されました。

ここに画像の説明を入力してください

.exeそれが4GBよりも大きいためです。7-Zipをインストールした後、彼はアーカイブを抽出できましたが、なぜWindowsがそのような実行可能ファイルを実行できないのでしょうか。そして、いくつかのオーバーライドを介して可能ですか?


2
通常、32ビットシステムではできません
Ramhound

1
Ramhoundの発言を拡張すると、7-Zip自己解凍型プログラムは、32ビットシステムの場合、最大アクセスサイズが4 GBのRAMに自身を格納することができます。また、アーカイブを完全にメモリに格納する必要がなかったために7-Zipが抽出できた理由も説明します(ただし、アーカイブが確実であるか、他の圧縮設定があったかによって異なります)。
Doktoro Reichard 2013年

はい、最初はそれが問題だと思いましたが、彼はWin64と16GBのRAMを使用しています。私も8 GBで使用しています。
Louis Waweru 2013年

回答:


10

このスレッドによれば、Windowsは4GBを超える実行可能ファイルをサポートしません。

http://sourceforge.net/p/sevenzip/discussion/45798/thread/337fc13e/

コメンター「Igor Pavlov」は、7-Zipの作成者であり保守者です。そのコメントはいくぶん控えめですが、sourceforgeフォーラムには同じアドバイスを繰り返す他のスレッドがあります。64ビットOSで実行可能ファイルを実行しても、Windows実行可能ファイルのサイズの制限、つまりWindows PEフォーマット自体の制限である可能性があるため、違いはないと思います。

64ビットプログラムの作成に関するこの記事は、次のことを示唆しています。

Win64ファイルの実行可能な「イメージ」(メモリに読み込まれたコード/データ)のサイズは2GBに制限されています。これは、AMD64 / EM64Tプロセッサがほとんどの命令に相対アドレッシングを使用し、相対アドレスがdwordに保持されるためです。dwordは、±2GBの相対値しか保持できません。

おそらくイゴールは±2GBを使用して4GBを達成する方法を考え出しました。


1
署名付きdwordの範囲は2,147,483,647です。符号なしdwordの範囲は4,294,967,295であり、その数はWindowsおよびそれ以外の32ビットシステムにおけるほとんどの制限の原因です。
ハシム

@Hashimは完全に正しいです4GiB - 1B = 2^32 - 1 bytes = 4,294,967,295 bytes。制限はです。.EXEファイルの形式でWinRARを使用して自己解凍型アーカイブを作成することにより、Windows 10 64ビットでそれを確認できました。サイズがの実行可能ファイル4GiBは起動しませんが、4GiB - 1B正常に動作します。
Robin Hartmann、

0

* .exe、*。dllなどのWindows実行可能ファイルには、PE32と64ビットバージョンのPE32 +(32ビットおよび64ビットバージョン)。

第2に、実行可能ファイルは実行前に完全にRAMに読み込まれ、Windowsに制限されていない場合でも(そうである場合でも)ハードウェアによって簡単に制限される可能性があります。


私が知っているように、リソースを含むファイル全体ではなく、exeファイルの特定のセクションのみをロードするようにWindowsに指示する方法があります。16ビットx86の制限が小さすぎるため、多くの大きなDOSプログラムもこのトリックを使用していると思います
phuclv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.