本文整理了Java中org.objectweb.asm.tree.analysis.Analyzer.analyze()
方法的一些代码示例,展示了Analyzer.analyze()
的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Analyzer.analyze()
方法的具体详情如下:
包路径:org.objectweb.asm.tree.analysis.Analyzer
类名称:Analyzer
方法名:analyze
[英]Analyzes the given method.
[中]分析给出的方法。
代码示例来源:origin: pxb1988/dex2jar
@Override
public void visitFile(Path file, String relative) throws IOException {
if (file.getFileName().toString().endsWith(".class")) {
ClassReader cr = new ClassReader(Files.readAllBytes(file));
ClassNode cn = new ClassNode();
cr.accept(new CheckClassAdapter(cn, false),
ClassReader.SKIP_DEBUG | ClassReader.EXPAND_FRAMES | ClassReader.SKIP_FRAMES);
for (MethodNode method : cn.methods) {
BasicVerifier verifier = new BasicVerifier();
Analyzer<BasicValue> a = new Analyzer<>(verifier);
try {
a.analyze(cn.name, method);
} catch (Exception ex) {
System.err.println("Error verify method " + cr.getClassName() + "." + method.name + " "
+ method.desc);
if (detail) {
ex.printStackTrace(System.err);
printAnalyzerResult(method, a, new PrintWriter(new OutputStreamWriter(System.err, StandardCharsets.UTF_8)));
}
}
}
}
}
});
代码示例来源:origin: linkedin/parseq
try {
Analyzer analyzer = new Analyzer(new SourceInterpreter());
Frame[] frames = analyzer.analyze(_classToAnalyze, this);
代码示例来源:origin: apache/groovy
Analyzer a = new Analyzer(new SimpleVerifier());
try {
a.analyze(ca.name, method);
continue;
} catch (Exception e) {
代码示例来源:origin: linkedin/parseq
@Override
public void visitEnd() {
try {
Analyzer analyzer = new Analyzer(new SourceInterpreter());
Frame[] frames = analyzer.analyze(_classToAnalyze, this);
int index = findMethodCall(this.instructions);
if (index == -1) {
return;
}
Frame f = frames[index];
String fieldDesc = "";
String methodDesc = "";
for (int j = 0; j < f.getStackSize(); ++j) {
SourceValue stack = (SourceValue) f.getStack(j);
Object insn = stack.insns.iterator().next();
if (insn instanceof FieldInsnNode) {
FieldInsnNode fieldInstr = (FieldInsnNode) insn;
fieldDesc = fieldInstr.name;
} else if (insn instanceof TypeInsnNode) {
fieldDesc = Util.getDescriptionForTypeInsnNode((TypeInsnNode) insn);
} else if (insn instanceof MethodInsnNode) {
methodDesc = Util.getDescriptionForMethodInsnNode((MethodInsnNode) insn);
}
}
_inferredOperation = getInferredOperation(fieldDesc, methodDesc);
} catch (AnalyzerException e) {
System.out.println("Unable to analyze class, could not infer operation");
}
}
代码示例来源:origin: pxb1988/dex2jar
@SuppressWarnings("rawtypes")
public static void verify(final ClassReader cr, PrintWriter out) throws AnalyzerException,
IllegalArgumentException, IllegalAccessException {
ClassNode cn = new ClassNode();
cr.accept(new CheckClassAdapter(cn, false), ClassReader.SKIP_DEBUG);
List methods = cn.methods;
for (int i = 0; i < methods.size(); ++i) {
MethodNode method = (MethodNode) methods.get(i);
List tryCatchBlocks = method.tryCatchBlocks;
for (int j = 0; j < tryCatchBlocks.size(); j++) {
TryCatchBlockNode tcn = (TryCatchBlockNode) tryCatchBlocks.get(j);
if (tcn.start.equals(tcn.end)) {
throw new DexException("try/catch block %d in %s has same start(%s) and end(%s)", j, method.name,
tcn.start.getLabel(), tcn.end.getLabel());
}
}
BasicVerifier verifier = new BasicVerifier();
Analyzer a = new Analyzer(verifier);
try {
a.analyze(cn.name, method);
} catch (Exception e) {
out.println(cr.getClassName() + "." + method.name + method.desc);
printAnalyzerResult(method, a, out);
e.printStackTrace(out);
out.flush();
throw new DexException("method " + method.name + " " + method.desc, e);
}
}
}
代码示例来源:origin: co.paralleluniverse/quasar
public InstrumentMethod(MethodDatabase db, String className, MethodNode mn) throws AnalyzerException {
this.db = db;
this.className = className;
this.mn = mn;
try {
Analyzer a = new TypeAnalyzer(db);
this.frames = a.analyze(className, mn);
this.lvarStack = mn.maxLocals;
this.firstLocal = ((mn.access & Opcodes.ACC_STATIC) == Opcodes.ACC_STATIC) ? 0 : 1;
} catch (UnsupportedOperationException ex) {
throw new AnalyzerException(null, ex.getMessage(), ex);
}
}
代码示例来源:origin: org.ow2.asm/asm-debug-all
@Override
public void visitEnd() {
Analyzer<BasicValue> a = new Analyzer<BasicValue>(
new BasicVerifier());
try {
a.analyze("dummy", this);
} catch (Exception e) {
if (e instanceof IndexOutOfBoundsException
&& maxLocals == 0 && maxStack == 0) {
throw new RuntimeException(
"Data flow checking option requires valid, non zero maxLocals and maxStack values.");
}
e.printStackTrace();
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw, true);
CheckClassAdapter.printAnalyzerResult(this, a, pw);
pw.close();
throw new RuntimeException(e.getMessage() + ' '
+ sw.toString());
}
accept(cmv);
}
}, labels);
代码示例来源:origin: jhorstmann/i18n
public final void extractMessages(InputStream in) throws IOException, MessageExtractorException {
ClassReader classReader = new ClassReader(in);
ClassNode classNode = new ClassNode();
classReader.accept(classNode, 0);
interpreter.setCurrentClass(classNode);
Analyzer analyzer = new Analyzer(interpreter);
try {
for (Iterator it=classNode.methods.iterator(); it.hasNext(); ) {
MethodNode methodNode = (MethodNode) it.next();
interpreter.setCurrentMethod(methodNode);
analyzer.analyze(classNode.name, methodNode);
}
} catch (AnalyzerException ex) {
throw new MessageExtractorException(ex);
}
}
}
代码示例来源:origin: net.jhorstmann/i18n-xgettext-asm
public final void extractMessages(InputStream in) throws IOException, MessageExtractorException {
ClassReader classReader = new ClassReader(in);
ClassNode classNode = new ClassNode();
classReader.accept(classNode, 0);
interpreter.setCurrentClass(classNode);
Analyzer analyzer = new Analyzer(interpreter);
try {
for (Iterator it=classNode.methods.iterator(); it.hasNext(); ) {
MethodNode methodNode = (MethodNode) it.next();
interpreter.setCurrentMethod(methodNode);
analyzer.analyze(classNode.name, methodNode);
}
} catch (AnalyzerException ex) {
throw new MessageExtractorException(ex);
}
}
}
代码示例来源:origin: EvoSuite/evosuite
private Frame[] getArrayFrames(MethodNode mn) {
try {
Analyzer a = new Analyzer(new BooleanArrayInterpreter());
a.analyze(cn.name, mn);
return a.getFrames();
} catch (Exception e) {
logger.info("[Array] Error during analysis: " + e);
return null;
}
}
代码示例来源:origin: EvoSuite/evosuite
private void getFrames(MethodNode mn, String className) {
try {
Analyzer a = new Analyzer(new BooleanValueInterpreter(mn.desc,
(mn.access & Opcodes.ACC_STATIC) == Opcodes.ACC_STATIC));
a.analyze(className, mn);
this.frames = a.getFrames();
} catch (Exception e) {
logger.info("1. Error during analysis: " + e);
//e.printStackTrace();
// TODO: Handle error
}
}
代码示例来源:origin: dragome/dragome-sdk
public Frame[] analyze(final String owner, final MethodNode m) throws AnalyzerException
{
// System.out.println("Analyze: "+owner+"|"+m.name+"|"+m.signature+"|"+m.tryCatchBlocks);
final Frame[] frames= super.analyze(owner, m);
for (int i= 0; i < m.instructions.size(); i++)
{
int opcode= m.instructions.get(i).getOpcode();
if (opcode == MONITORENTER || opcode == MONITOREXIT)
{
// System.out.println(i);
}
}
return frames;
}
};
代码示例来源:origin: org.lwjgl.lwjgl/lwjgl_util
private Frame<BasicValue>[] analyse() throws AnalyzerException {
final Analyzer<BasicValue> a = new Analyzer<BasicValue>(new SimpleVerifier());
a.analyze(className, this);
return a.getFrames();
}
代码示例来源:origin: org.apache.aries.spifly/org.apache.aries.spifly.dynamic.framework.extension
@Override
public void visitEnd() {
Analyzer<BasicValue> analyzer = new Analyzer<BasicValue>(new BasicVerifier());
try {
analyzer.analyze("dummy", this);
} catch (IndexOutOfBoundsException e) {
if (maxLocals == 0 && maxStack == 0) {
throw new IllegalArgumentException(
"Data flow checking option requires valid, non zero maxLocals and maxStack.",
e);
}
throwError(analyzer, e);
} catch (AnalyzerException e) {
throwError(analyzer, e);
}
accept(methodVisitor);
}
代码示例来源:origin: org.apache.aries.spifly/org.apache.aries.spifly.dynamic.bundle
@Override
public void visitEnd() {
Analyzer<BasicValue> analyzer = new Analyzer<BasicValue>(new BasicVerifier());
try {
analyzer.analyze("dummy", this);
} catch (IndexOutOfBoundsException e) {
if (maxLocals == 0 && maxStack == 0) {
throw new IllegalArgumentException(
"Data flow checking option requires valid, non zero maxLocals and maxStack.",
e);
}
throwError(analyzer, e);
} catch (AnalyzerException e) {
throwError(analyzer, e);
}
accept(methodVisitor);
}
代码示例来源:origin: fge/grappa
public static void verifyMethodIntegrity(final String ownerInternalName, final MethodNode method) {
try {
new Analyzer(new SimpleVerifier()).analyze(ownerInternalName, method);
} catch (AnalyzerException e) {
throw new RuntimeException(
"Integrity error in method '" + method.name + "' of type '" + ownerInternalName + "': ", e);
}
}
代码示例来源:origin: vsilaev/tascalate-javaflow
public void visitEnd() {
if (instructions.size() == 0 || labels.size() == 0) {
accept(mv);
return;
}
this.stackRecorderVar = maxLocals;
try {
moveNew();
analyzer = new Analyzer(new FastClassVerifier(inheritanceLookup)) {
@Override
protected Frame newFrame(int nLocals, final int nStack) {
return new MonitoringFrame(nLocals, nStack);
}
@Override
protected Frame newFrame(Frame src) {
return new MonitoringFrame(src);
}
};
analyzer.analyze(className, this);
accept(new ContinuableMethodVisitor(this));
} catch (AnalyzerException ex) {
throw new RuntimeException(ex);
}
}
代码示例来源:origin: net.tascalate.javaflow/net.tascalate.javaflow.providers.asm5
@Override
public void visitEnd() {
checkCallSites();
if (instructions.size() == 0 || labels.size() == 0) {
accept(mv);
return;
}
this.stackRecorderVar = maxLocals;
try {
moveNew();
analyzer = new Analyzer(new FastClassVerifier(inheritanceLookup)) {
@Override
protected Frame newFrame(int nLocals, int nStack) {
return new MonitoringFrame(nLocals, nStack);
}
@Override
protected Frame newFrame(Frame src) {
return new MonitoringFrame(src);
}
};
analyzer.analyze(className, this);
accept(new ContinuableMethodVisitor(this));
} catch (AnalyzerException ex) {
throw new RuntimeException(ex);
}
}
代码示例来源:origin: vsilaev/tascalate-javaflow
public void visitEnd() {
checkCallSites();
if (instructions.size() == 0 || labels.size() == 0) {
accept(mv);
return;
}
this.stackRecorderVar = maxLocals;
try {
moveNew();
analyzer = new Analyzer(new FastClassVerifier(inheritanceLookup)) {
@Override
protected Frame newFrame(int nLocals, int nStack) {
return new MonitoringFrame(nLocals, nStack);
}
@Override
protected Frame newFrame(Frame src) {
return new MonitoringFrame(src);
}
};
analyzer.analyze(className, this);
accept(new ContinuableMethodVisitor(this));
} catch (AnalyzerException ex) {
throw new RuntimeException(ex);
}
}
代码示例来源:origin: jpcsp/jpcsp
/**
* Remove the dead code - or unreachable code - from a method.
*
* @param method the method to be updated
*/
private void removeDeadCode(MethodNode method) {
try {
// Analyze the method using the BasicInterpreter.
// As a result, the computed frames are null for instructions
// that cannot be reached.
Analyzer analyzer = new Analyzer(new BasicInterpreter());
analyzer.analyze(specializedClassName, method);
Frame[] frames = analyzer.getFrames();
AbstractInsnNode[] insns = method.instructions.toArray();
for (int i = 0; i < frames.length; i++) {
AbstractInsnNode insn = insns[i];
if (frames[i] == null && insn.getType() != AbstractInsnNode.LABEL) {
// This instruction was not reached by the analyzer
method.instructions.remove(insn);
insns[i] = null;
}
}
} catch (AnalyzerException e) {
// Ignore error
}
}
内容来源于网络,如有侵权,请联系作者删除!