disassembler.java
来自「First of all, the Applet-phone is a SIP 」· Java 代码 · 共 96 行
JAVA
96 行
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 + =
减小字号Ctrl + -
显示快捷键?