ByteCode .java uzantılı dosyanın JVM üzereinde çalıştırılabilir hali olan .class isimli dosyadır.
javap komutunu test etmek için önce basit bir sınıf oluşturalım.
class TestLocalVariableNames {
String deneme;
public String aMethod(int arg) {
String local1 = "a string";
StringBuilder local2 = new StringBuilder();
return local2.append(local1).append(arg).toString();
}
public String bMethod(int arg) {
for(int index=0;index<=5;index++){
int total = index+5;
}
return null;
}
}
bu sınıfı
terminalden
javac TestLocalVariableNames.java
diyerek derliyoruz . Daha sonra
javap TestLocalVariableNames
komutunu çalıştırarak java bytecodeları üzerinde disassembler işlemini yapıyor.
disassemble : Elimizdeki .class isimli derlenmiş dosyayı .java dosyasını ayrıştırılmış halini elde etmemize yarar.
javap sonucu Compiled from "TestLocalVariableNames.java"
class TestLocalVariableNames extends java.lang.Object{
java.lang.String deneme;
TestLocalVariableNames();
public java.lang.String aMethod(int);
public java.lang.String bMethod(int);
}
javap paramatereleri ne burdan ulaşabilirsiniz.
Ayrıca aşağıdaki metod ile java tarafında istediğinizi sınıfı disassemble edebilirsiniz.
public static List
List
BufferedReader bufferedReader = null;
try {
String classPath = System.getProperty("java.class.path");
Runtime runTime = Runtime.getRuntime();
Process javap = runTime.exec("javap -classpath \"" + classPath + "\" -l -c " + clazz.getName());
bufferedReader = new BufferedReader(new InputStreamReader(javap.getInputStream()));
if (bufferedReader != null) {
String line = bufferedReader.readLine();
while (line != null) {
cachedInfo.add(line);
line = bufferedReader.readLine();
}
}
} catch (Exception e) {
cachedInfo = null;
}
return cachedInfo;
}
Bunu dışında
com.sun.org.apache.bcel.internal.classfile.ClassParser
com.sun.org.apache.bcel.internal.classfile.JavaClass;
ile sınıfın metodlarına , paramatereleri ,değişkenlerine ulaşabilirsiniz.
jad olablir mi
YanıtlaSil