?? disassembler.java
字號:
package gov.nist.util.disassembler;import java.io.File;import java.io.FileOutputStream;import java.io.PrintStream;import org.apache.bcel.classfile.ClassParser;import org.apache.bcel.classfile.JavaClass;import org.apache.bcel.classfile.Method;import org.apache.bcel.generic.CodeExceptionGen;import org.apache.bcel.generic.ConstantPoolGen;import org.apache.bcel.generic.InstructionHandle;import org.apache.bcel.generic.InstructionList;import org.apache.bcel.generic.MethodGen;/* * Disassembler.java * * Created on June 19, 2003, 9:47 AM *//** * * @author DERUELLE Jean */public class Disassembler { String className=null; ConstantPoolGen cp=null; PrintStream ps=null; public Disassembler(String className,String outputFile){ this.className=className; try{ File file=new File(outputFile); if(file.exists()) file.delete(); file.createNewFile(); FileOutputStream fos=new FileOutputStream(file); ps=new PrintStream(fos); } catch(Exception e){ e.printStackTrace(); } } public void printByteCodeMethod(MethodGen method){ ps.println("/******************************/"); ps.println("Method "+method.getName()); ps.println("/******************************/"); InstructionList il = method.getInstructionList(); il.setPositions(); InstructionHandle[] instructionHandles=il.getInstructionHandles(); for(int i=0;i<instructionHandles.length;i++){ ps.print(instructionHandles[i].getPosition()+" "); ps.println(instructionHandles[i].getInstruction().toString(cp.getConstantPool())); } CodeExceptionGen[] exceptionTable=method.getExceptionHandlers(); if(exceptionTable.length!=0){ ps.println("/******************************/"); ps.println("Exception(s) "); ps.println("/******************************/"); ps.println("Try start \t Try end \t Catch Start "); for(int i=0;i<exceptionTable.length;i++){ ps.println(exceptionTable[i].getStartPC().getPosition()+" \t\t "+exceptionTable[i].getEndPC().getPosition()+" \t\t "+exceptionTable[i].getHandlerPC().getPosition()); ps.println("Exception Type : "+exceptionTable[i].getCatchType().getClassName()); } } ps.println(); } public void printAllByteCode(){ try{ JavaClass jclass = new ClassParser(className).parse(); cp = new ConstantPoolGen(jclass.getConstantPool()); ps.println("Informations about the class "+className+" : "); ps.println(jclass.toString()); ps.println(); Method methods[] = jclass.getMethods(); for (int i= 0; i < methods.length; i++) { MethodGen mg = new MethodGen(methods[i],jclass.getClassName(), cp); printByteCodeMethod(mg); } } catch(java.io.IOException ioe){ ioe.printStackTrace(); } } public static void main(String args[]){ Disassembler disassembler=new Disassembler(args[0],args[1]); disassembler.printAllByteCode(); //Class2HTML.main(args); }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -