testcontrolflowgraph.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 47 行
JAVA
47 行
/*
* $Id: TestControlFlowGraph.java,v 1.3 2004/02/20 08:21:05 epr Exp $
*/
package org.jnode.test;
import java.io.File;
import org.jnode.vm.VmSystemClassLoader;
import org.jnode.vm.bytecode.BytecodeParser;
import org.jnode.vm.bytecode.BytecodeViewer;
import org.jnode.vm.bytecode.ControlFlowGraph;
import org.jnode.vm.classmgr.VmByteCode;
import org.jnode.vm.classmgr.VmMethod;
import org.jnode.vm.classmgr.VmType;
import org.jnode.vm.x86.VmX86Architecture;
/**
* @author epr
*/
public class TestControlFlowGraph {
public static void main(String[] args)
throws Exception {
final String className = (args.length > 0) ? args[0] : "java.lang.Object";
final VmSystemClassLoader loader = new VmSystemClassLoader(new File(".").toURL(), new VmX86Architecture());
final VmType vmClass = loader.loadClass(className, true);
for (int i = 0; i < vmClass.getNoDeclaredMethods(); i++) {
TestCFG(vmClass.getDeclaredMethod(i));
}
}
private static void TestCFG(VmMethod method) {
final VmByteCode bc = method.getBytecode();
System.out.println("Method " + method);
System.out.println("MaxStack " + bc.getMaxStack());
System.out.println("#Locals " + bc.getNoLocals());
System.out.println("#Arg slots " + method.getArgSlotCount());
final ControlFlowGraph cfg = new ControlFlowGraph(method.getBytecode());
BytecodeParser.parse(method.getBytecode(), new BytecodeViewer(cfg));
System.out.println();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?