分析.class文件
问题描述:
答
字节代码注入
- >>>注射,你想监控的类中的计数的代码。
对于字节码注入,您可以使用ASM或JavaAssit。
+0
非常感谢,但我认为我不会为我工作。 使用您的解决方案,我将看到在应用程序运行时调用该方法的次数,但我想进行静态分析。通过编译我的项目,我想了解一个方法被调用到类中的次数 – Nestor
答
解决方案: 尝试下面的代码,你会得到一个提示通过字节码遍历。如果仔细观察,您可以看到在代码中使用了多少次您的方法。为此你甚至可以使用Regex。
package com.cosmic.evaluate.asm;
import java.io.FileInputStream;
import java.io.PrintWriter;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.util.ASMifier;
import org.objectweb.asm.util.TraceClassVisitor;
public class TetsMain {
public static void main(String[] args) throws Exception {
String classPath = "./target/classes/com/cosmic/evaluate/asm/TestClass.class";
int flags = ClassReader.SKIP_DEBUG;
ClassReader cr;
if (classPath.endsWith(".class") || classPath.indexOf('\\') > -1 || classPath.indexOf('/') > -1) {
cr = new ClassReader(new FileInputStream(classPath));
} else {
cr = new ClassReader(classPath);
}
cr.accept(new TraceClassVisitor(null, new ASMifier(), new PrintWriter(System.out)), flags);
}
}
Maven的依赖二手 org.ow2.asm ASM-所有 5.0.3
你约达灵静态或动态的信息?你想知道'.class'本身提及的方法的频率,或者你想知道一个方法在执行时被调用了多少次? –
您可以使用ASM访问代码并计算提及该方法的次数。如果您想在运行时了解这些信息,我建议使用面向方面的库来执行此操作。你可以像ASM一样(像这些库一样),但更高级的库会更容易。 –
我正在尝试做静态分析。试图计算方法被提及的类的次数 – Nestor