11

Java ゲームのMinecraftが今週末無料です。Windows版はexeファイルとしてダウンロードされます。私は、EXE ファイルが何をしているのか、実際のゲーム JAR をどこから解凍して実行しているのかに興味がありました。そこで、コマンドを使用して、実行中の javaw.exe プロセスへのコマンドライン引数を見つけました。そして奇妙なことに、実行可能ファイルを指すクラスパスで起動されました! (つまり、.exe ファイルは jar として機能していました)。確かに、Minecraft.exe を Minecraft.jar に名前を変更した後、それを開いて、EXE ではなく通常の JAR ファイルであるかのように、ローダー クラス ファイルなどを見ることができました。

これはどのように可能ですか?また、自分の JAR ファイルを使用してそれを行うにはどうすればよいですか?

4

5 に答える 5

11

これは以前は非常に一般的でした。特にフロッピー ディスクの時代には、スペースが貴重であり、zip ファイルとは別のディスクに unzip プログラムを配置するのは面倒でした。

これが可能な理由は、zip ファイルのインベントリ構造がzip ファイルの先頭ではなく末尾にあるためです。したがって、zip ファイルには、インベントリ構造が存在する限り、最初の無関係なバイトが多数含まれる可能性があります。それらを指さないでください(および拡張子jarファイルも)。これは非常に頻繁に使用され、zip ファイルを解凍できる小さな unzip 専用プログラムを同封するために使用されます。

このようなプログラムを先頭に追加するユーティリティの 1 つは unzipsfx です。ここにマニュアルページがあります: http://linuxcommand.org/man_pages/unzipsfx1.html

Minecraft は、それ自体で Java を呼び出す別のプリペンド プログラムを使用しているようです。


編集:16進エディタで内部を見ました。Minecraft.exe は Launch4j でラップされています。

于 2010-09-21T02:07:42.077 に答える
3

Minecraft.exe を Minecraft.jar に名前を変更した後、開くことができ、ローダー クラス ファイルなどを確認できました。

一部の EXE ファイルは、実際には自己解凍型の ZIP ファイルです。JAR ファイルは、特別なファイル構造を持つ通常の ZIP ファイルです。名前を変更した後、ZIPツールを使用して開いていたに違いありません。一部の ZIP ツールは Windows エクスプローラーに自動統合されるため (またはその逆)、一見透過的に行われることに注意してください。

于 2010-09-20T19:08:06.113 に答える
2

Launch4J がこれを行います。それは本当にかなり印象的です。

于 2010-09-20T19:57:40.393 に答える
2

ZIP (拡張子は JAR) ファイル形式は、アーカイブを別のファイル形式に埋め込むことができるという点で柔軟性があります。これにより、自己解凍型の ZIP アーカイブが可能になります (ZIP ファイルのパラメーターが unzip ユーティリティによって確実に無視される領域にいくつかの小さなコードが埋め込まれています)。また、いくつかの特に卑劣なエクスプロイトにも使用されています。

私の推測では、Minecraft も同様に、アーカイブを有効な Windows 実行可能ファイルにする機能を悪用し、JVM をクラスパスで起動するコードを追加したと思われます。

関連項目:ウィキペディア: ZIP と他のファイル形式の結合

于 2010-09-20T19:23:21.433 に答える
1

深く掘り下げてラッパーを使用せずに迅速な解決策が必要な場合は、Jsmoothがうまく機能します。

于 2010-09-20T19:04:13.587 に答える