用BCEL设计字节码 - 直接在方法的调用处添加方法 - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-20
ConstantClass cc = (ConstantClass)pgen.getConstant(cmr.getClassIndex()); String nowClassName = cc.getBytes(pgen.getConstantPool()); ConstantNameAndType cnt = (ConstantNameAndType)pgen.getConstant(cmr.getNameAndTypeIndex()); String nowMethodName = cnt.getName(pgen.getConstantPool()); String nowMethodSignature = cnt.getSignature(pgen.getConstantPool()); //登僅緩圭隈議侭奉議窃,圭隈議兆各,圭隈議禰兆頁倦嚥侭勣紗議匯崑(I)Ljava/lang/String; if(nowClassName.equals(classname) && nowMethodName.equals(methodname) && nowMethodSignature.equals(methodSignature)){ cgen.removeMethod(tempMethodGen.getMethod()); //孀欺緩圭隈壓list議了崔 InstructionList beforeList = new InstructionList(); //枠紗匯倖蕉何延楚隠贋starttime議峙 LocalVariableGen lvg = tempMethodGen.addLocalVariable("starttime", Type.LONG, null, null); beforeList.append(ifact.createInvoke("ToolUtil", "printStart", Type.LONG, Type.NO_ARGS, Constants.INVOKESTATIC)); beforeList.append(InstructionFactory.createStore(Type.LONG, lvg.getIndex())); tempList.insert(ihandle.getPrev().getPrev(), beforeList); //紗圭隈朔議旗鷹 InstructionList afterList = new InstructionList(); afterList.append(ifact.createConstant(methodname)); afterList.append(ifact.createLoad(Type.LONG, lvg.getIndex())); afterList.append(ifact.createInvoke("ToolUtil", "printEnd", Type.VOID, new Type[]{Type.STRING,Type.LONG}, Constants.INVOKESTATIC)); tempList.insert(ihandle.getNext().getNext(), afterList); //finalize the construted method tempMethodGen.stripAttributes(false); tempMethodGen.setMaxStack(); tempMethodGen.setMaxLocals(); cgen.addMethod(tempMethodGen.getMethod()); System.out.println(te |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于用BCEL设计字节码 - 直接在方法的调用处添加方法 - 编程入门网的所有评论