想请教 Java 为什么不能反射方法体? 如果可以反射方法返回值类型,参数列表。没理由不能反射方法体。而且也有像jad这样的程序,说明可以实现class的2进制码->源代码。所以,为啥呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 反射是反射类的基本信息反射与反编译是有区别的如果需要操作方法体的话,那需要掌握 JVM 指令,一般可以使用 ASM 这个工具进行操作,不过很复杂。 感谢回复,反射在runtime 时用类加载器加载一个类的元数据,而方法体并没有被当作元数据。所以此过程没有反编译,grand。但如果方法体是元数据的话,就可以直接像 修改 modifier 或 增加instance variable 那样instrument the method,这个和用ASM or JLI instruments method body 就一样吧。请问获取元数据的过程一点反编译也没有吗?毕竟读入参数是一个.class文件。 接贴:我们得到的元数据,是原始class的副本,所以对副本的改变并没有影响.class文件本身。假设Instruction[] Instructions = methodA.getMethodBody().getByteCode();..manipulate bytecode..invoke the instrumented methodstraightforward than JLI isnt it?只是想问问这样的可行性是不是存在,至于sun为什么不这么做,肯定有他们的道理。 1.获取元数据直接从class文件中就可以解析出来了。建议读一下class文件格式。2.要得到方法体的话,需要的是反编译知识,虽然通过中间代码得到源代码比从可执行程序得到要容易很多,但也很难做到完全的一致,还不提故意混淆的情况。这个你可以用jad去试验。3.得到方法代码有啥意义吗? 受教了!其实得到汇编码就可以了,源代码确实没太大用。在汇编码添加些拦截,报告,计算。我想是不是reflection能反射出方法的汇编码,反正都读一遍class了,在class的method_info结构体里加个指针指向method initial address不行吗。 通过Class得到Method,然后可以invoke(当然要找到方法指令集),lz的问题其实已经解决了 java中网络传输出现java.net.SocketException 下载后文件不完整 TimeStamp 和String 问题 一个小问题,望高手赐教 新手问题:javabean 用法问题? JCheckBox如何分组啊? String->double的转换问题 救命啊,一个XML设置编码的问题,大家帮我看看啊,痛苦不堪。。。。。。 高分求java做的类似QQ源程序 请高手指教:学JAVA从哪里切入比较好? 小白在自学过程中遇到问题了,请各位大佬指导 有关输入流重定向的问题,在线等!!! 在线等(新手试问)
但如果方法体是元数据的话,就可以直接像 修改 modifier 或 增加instance variable 那样instrument the method,这个和用ASM or JLI instruments method body 就一样吧。请问获取元数据的过程一点反编译也没有吗?毕竟读入参数是一个.class文件。
我们得到的元数据,是原始class的副本,所以对副本的改变并没有影响.class文件本身。
假设
Instruction[] Instructions = methodA.getMethodBody().getByteCode();
..manipulate bytecode..
invoke the instrumented methodstraightforward than JLI isnt it?
只是想问问这样的可行性是不是存在,至于sun为什么不这么做,肯定有他们的道理。
2.要得到方法体的话,需要的是反编译知识,虽然通过中间代码得到源代码比从可执行程序得到要容易很多,但也很难做到完全的一致,还不提故意混淆的情况。这个你可以用jad去试验。
3.得到方法代码有啥意义吗?
其实得到汇编码就可以了,源代码确实没太大用。在汇编码添加些拦截,报告,计算。我想是不是reflection能反射出方法的汇编码,反正都读一遍class了,
在class的method_info结构体里加个指针指向method initial address不行吗。