1

With javap, I can do this:

xb@dnxb:/tmp$ javap 'java.util.Base64'
Compiled from "Base64.java"
public class java.util.Base64 {
  public static java.util.Base64$Encoder getEncoder();
  public static java.util.Base64$Encoder getUrlEncoder();
  public static java.util.Base64$Encoder getMimeEncoder();
  public static java.util.Base64$Encoder getMimeEncoder(int, byte[]);
  public static java.util.Base64$Decoder getDecoder();
  public static java.util.Base64$Decoder getUrlDecoder();
  public static java.util.Base64$Decoder getMimeDecoder();
}
xb@dnxb:/tmp$ 

But how to I search by class name without knowing it's under java.util.* ? (with command line utility without java coding)

xb@dnxb:/tmp$ javap 'Base64'
Error: class not found: Base64
xb@dnxb:/tmp$ javap '*.Base64'
Error: class not found: *.Base64
xb@dnxb:/tmp$ javap '*Base64'
Error: class not found: *Base64
xb@dnxb:/tmp$
林果皞
  • 7,539
  • 3
  • 55
  • 70

1 Answers1

0

I figure out I can create my map with this way:

xb@dnxb:/tmp$ java -verbose |& grep rt.jar | head -1 #to find out java runtime path
[Opened /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar]
xb@dnxb:/tmp$ unzip /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar -d /tmp/rt #unzip the rt.jar
   creating: /tmp/rt/META-INF/
 extracting: /tmp/rt/META-INF/MANIFEST.MF  
 extracting: /tmp/rt/com/oracle/net/Sdp$1.class  
 extracting: /tmp/rt/com/oracle/net/Sdp$SdpSocket.class
...
 extracting: /tmp/rt/java/io/Serializable.class  
 extracting: /tmp/rt/java/lang/String.class  
 extracting: /tmp/rt/java/lang/Object.class  
xb@dnxb:/tmp$ 
xb@dnxb:/tmp$ find /tmp/rt > /tmp/rt.map #create list path as map
xb@dnxb:/tmp$ 

, and then grep (probably better make it as shell function):

xb@dnxb:/tmp$ grep -rni Base64\.class /tmp/rt.map 
1839:/tmp/rt/java/util/Base64.class
2276:/tmp/rt/java/util/prefs/Base64.class
10340:/tmp/rt/com/sun/xml/internal/messaging/saaj/util/Base64.class
13363:/tmp/rt/com/sun/org/apache/xml/internal/security/utils/Base64.class
15044:/tmp/rt/com/sun/org/apache/xerces/internal/impl/dv/xs/Base64BinaryDV$XBase64.class
15096:/tmp/rt/com/sun/org/apache/xerces/internal/impl/dv/util/Base64.class
xb@dnxb:/tmp$ 

Note that /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/classlist only included ~2559 lines, unlike ~20706 lines in /tmp/rt.map, so I can't direct grep classlist file.

林果皞
  • 7,539
  • 3
  • 55
  • 70