package test; import java.util.GregorianCalendar; import org.ldp.jdasm.*; import org.ldp.jdasm.attribute.*; import org.ldp.jdasm.attribute.instruction.*; import org.ldp.jdasm.attribute.instruction.opcode.*; import org.ldp.jdasm.exception.*; public class JDASM_HelloWorldBuilder { public static void main( String[] argv ) { try { double startTime = new GregorianCalendar().getTimeInMillis(); DClass d = new DClass("HelloWorld"); DMethod m = d.addMethod( "public static void main( java.lang.String[] argv )"); CodeAttribute code = m.getCodeAttribute(); Instruction start1 = code.addCode(new NEW("java/io/BufferedReader")); code.addCode(new DUP()); code.addCode(new NEW("java/io/InputStreamReader")); code.addCode(new DUP()); code.addCode(new GETSTATIC("java/lang/System in Ljava/io/InputStream;")); code.addCode(new INVOKESPECIAL("java/io/InputStreamReader (Ljava/io/InputStream;)V")); code.addCode(new INVOKESPECIAL("java/io/BufferedReader (Ljava/io/Reader;)V")); Instruction start2 = code.addCode(new ASTORE_1()); code.addCode(new ACONST_NULL()); Instruction start3 = code.addCode(new ASTORE_2()); Instruction tryStart = code.addCode(new GETSTATIC("java/lang/System out Ljava/io/PrintStream;")); code.addCode(new LDC("Please enter your name> ", false)); code.addCode(new INVOKEVIRTUAL("java/io/PrintStream print (Ljava/lang/String;)V")); code.addCode(new ALOAD_1()); code.addCode(new INVOKEVIRTUAL("java/io/BufferedReader readLine ()Ljava/lang/String;")); code.addCode(new ASTORE_2()); Instruction go = code.addCode(new GOTO()); Instruction catchStart = code.addCode(new RETURN()); go.setJumpTarget( code.addCode(new GETSTATIC("java/lang/System out Ljava/io/PrintStream;")) ); code.addCode(new NEW("java/lang/StringBuffer")); code.addCode(new DUP()); code.addCode(new LDC("Hallo, ", false)); code.addCode(new INVOKESPECIAL("java/lang/StringBuffer (Ljava/lang/String;)V")); code.addCode(new ALOAD_2()); code.addCode(new INVOKEVIRTUAL("java/lang/StringBuffer append (Ljava/lang/String;)Ljava/lang/StringBuffer;")); code.addCode(new INVOKEVIRTUAL("java/lang/StringBuffer toString ()Ljava/lang/String;")); code.addCode(new INVOKEVIRTUAL("java/io/PrintStream println (Ljava/lang/String;)V")); Instruction end = code.addCode(new RETURN()); code.addException(new ExceptionElement(tryStart,catchStart,catchStart, "java/io/IOException")); LocalVariableTableAttribute tab = (LocalVariableTableAttribute)code.addAttribute(new LocalVariableTableAttribute()); tab.add( new LocalVariableTableElement(start1, end, "argv", "Ljava/lang/String;", 0)); tab.add( new LocalVariableTableElement(start2, end, "in", "Ljava/io/BufferedReader;", 1)); tab.add( new LocalVariableTableElement(start3, end, "name", "Ljava/lang/String;", 2)); d.addEmptyConstructor(); d.addAttribute(new SourceFileAttribute("")); // * build d.build(); double endTime = new GregorianCalendar().getTimeInMillis(); System.out.println("Class created in " + (endTime-startTime) + " ms"); d.writeClassToFile("."); } catch( CodeParseException e) { System.out.println("Hai sbagliato a scrivere: " + e ); } } }