Debian

如何在 jar 文件上使用 javap

  • December 27, 2021

我正在執行 debian buster,並且有一個非常古老的 java 遊戲,我用 openjdk 玩過本機遊戲,但我不記得確切的版本。所以我試圖用javap找出jar文件是用哪個java版本編譯的。

javap -v java-spiele/edna_bricht_aus/Edna.jar 
Error: class not found: java-spiele/edna_bricht_aus/Edna.jar

預設java版本是

java -version
openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment (build 11.0.13+8-post-Debian-1deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.13+8-post-Debian-1deb10u1, mixed mode, sharing)

也許是新的。所以我從stretch repo安裝了openjdk-8(是的,我知道franken debian)再試一次

/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/javap -v /home/alex/java-spiele/edna_bricht_aus/Edna.jar 
Error: class not found: /home/alex/java-spiele/edna_bricht_aus/Edna.jar

甚至有可能從商業遊戲中獲取資訊嗎?使用 openjdk-8 遊戲沒有執行它崩潰。

javap需要一個類,而不是 JAR。要反彙編 JAR 中的類,請將 JAR 添加到類路徑並指定類名;例如,使用 JSTL 而不是您的遊戲:

javap -v -classpath jstl-1.2.jar org.apache.taglibs.standard.tlv.JstlCoreTLV

要查看 JAR 中的類,請使用jar tf; 用點替換斜杠以將路徑轉換為包。

要找出建構 JAR 中所有類的 Java 版本,最好提取 JAR 中的類並file在它們上執行:

mkdir foo
cd foo
jar xf ../java-spiele/edna_bricht_aus/Edna.jar
find . -name \*.class -exec file {} +

引用自:https://unix.stackexchange.com/questions/683958