Minecraft本周末免费。 Windows版本作为exe文件下载。我很好奇EXE文件正在做什么以及它从哪里解压缩并运行实际的游戏JAR。所以使用命令,我找到了运行javaw.exe进程的命令行参数;奇怪的是,它是用一个指向可执行文件的类路径启动的! (意思是,.exe文件充当jar)。实际上,在将Minecraft.exe重命名为Minecraft.jar之后,我能够打开它并查看加载器类文件等,就像它是一个普通的JAR文件而不是EXE一样。
这怎么可能?我怎么能用我自己的JAR文件呢?
答案 0 :(得分:11)
以前使用这种方法非常普遍 - 特别是在软盘空间宝贵的时代,解压缩程序与zip文件位于不同的磁盘上是很繁琐的。
之所以可以这样做是因为zip文件库存结构位于zip文件的 end ,而不是前面,所以zip文件可以包含大量的只要库存结构没有指向它们(并且通过扩展名jar文件),初始不相关的字节。一个非常频繁的用途是附上一个小的解压缩程序,然后解压缩zip文件。
这个程序前置的一个实用程序是unzipsfx。这是一个手册页: http://linuxcommand.org/man_pages/unzipsfx1.html
似乎Minecraft使用另一个自行调用Java的前置程序。
编辑:用十六进制编辑器查看内部。 Minecraft.exe包含在Launch4j中。
答案 1 :(得分:3)
将Minecraft.exe重命名为Minecraft.jar后,我能够打开它并查看加载器类文件等
某些EXE文件实际上是自解压ZIP文件。 JAR文件依次是具有特殊文件结构的普通ZIP文件。我敢打赌,你只是在重命名后使用ZIP工具打开它。请注意,某些ZIP工具将在Windows资源管理器中自动集成(或者反过来),以便它看起来透明。
答案 2 :(得分:2)
ZIP(以及扩展名,JAR)文件格式非常灵活,因为它允许将存档嵌入到另一种文件格式中。这使得自解压ZIP压缩文件成为可能(一些小代码嵌入在ZIP文件参数确保被解压缩实用程序忽略的区域中)。它也被用于一些特别偷偷摸摸的漏洞利用。
我的猜测是,Minecraft同样利用了使存档成为有效Windows可执行文件的能力,并添加了代码以在类路径中启动JVM。
答案 3 :(得分:2)
Launch4J就是这么做的。这真是令人印象深刻。
答案 4 :(得分:1)
如果你想要一个快速的解决方案,而不需要花太多钱并使用包装器,Jsmooth可以很好地完成它。