⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jasmparser.java

📁 Java Bytecode Editor 是一个 JAVA 的字节码反汇编和修改器。它可以很方便的修改已经编译成 Class 文件的 JAVA 文件。
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("ixor")) {
					ih = instructions.append(new IXOR());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("l2d")) {
					ih = instructions.append(new L2D());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("l2f")) {
					ih = instructions.append(new L2F());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("l2i")) {
					ih = instructions.append(new L2I());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("ladd")) {
					ih = instructions.append(new LADD());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("laload")) {
					ih = instructions.append(new LALOAD());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("land")) {
					ih = instructions.append(new LAND());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lastore")) {
					ih = instructions.append(new LASTORE());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lcmp")) {
					ih = instructions.append(new LCMP());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lconst_0")) {
					ih = instructions.append(new LCONST(0));
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lconst_1")) {
					ih = instructions.append(new LCONST(1));
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("ldiv")) {
					ih = instructions.append(new LDIV());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lload_0")) {
					ih = instructions.append(new LLOAD(0));
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lload_1")) {
					ih = instructions.append(new LLOAD(1));
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lload_2")) {
					ih = instructions.append(new LLOAD(2));
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lload_3")) {
					ih = instructions.append(new LLOAD(3));
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lmul")) {
					ih = instructions.append(new LMUL());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lneg")) {
					ih = instructions.append(new LNEG());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lor")) {
					ih = instructions.append(new LOR());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lrem")) {
					ih = instructions.append(new LREM());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lreturn")) {
					ih = instructions.append(new LRETURN());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lshl")) {
					ih = instructions.append(new LSHL());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lshr")) {
					ih = instructions.append(new LSHR());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lstore_0")) {
					ih = instructions.append(new LSTORE(0));
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lstore_1")) {
					ih = instructions.append(new LSTORE(1));
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lstore_2")) {
					ih = instructions.append(new LSTORE(2));
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lstore_3")) {
					ih = instructions.append(new LSTORE(3));
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lsub")) {
					ih = instructions.append(new LSUB());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lushr")) {
					ih = instructions.append(new LUSHR());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("lxor")) {
					ih = instructions.append(new LXOR());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("monitorenter")) {
					ih = instructions.append(new MONITORENTER());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("monitorexit")) {
					ih = instructions.append(new MONITOREXIT());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("nop")) {
					ih = instructions.append(new NOP());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("pop")) {
					ih = instructions.append(new POP());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("pop2")) {
					ih = instructions.append(new POP2());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("return")) {
					ih = instructions.append(new RETURN());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("saload")) {
					ih = instructions.append(new SALOAD());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("sastore")) {
					ih = instructions.append(new SASTORE());
					instructionHandleList.add(ih);
					labels++;
				} else if (instrName.equals("swap")) {
					ih = instructions.append(new SWAP());
					instructionHandleList.add(ih);
					labels++;
				}
				// Jump instructions
				else if (instrName.equals("goto")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new GOTO(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("goto_w")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new GOTO_W(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("if_acmpeq")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IF_ACMPEQ(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("if_acmpne")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IF_ACMPNE(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("if_icmpeq")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IF_ICMPEQ(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("if_icmpge")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IF_ICMPGE(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("if_icmpgt")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IF_ICMPGT(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("if_icmple")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IF_ICMPLE(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("if_icmplt")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IF_ICMPLT(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("if_icmpne")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IF_ICMPNE(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("ifeq")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IFEQ(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("ifge")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IFGE(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("ifgt")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					;
					ih = instructions.append(new IFGT(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("ifle")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IFLE(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("iflt")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IFLT(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("ifne")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IFNE(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("ifnonnull")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IFNONNULL(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("ifnull")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new IFNULL(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("jsr")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new JSR(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else if (instrName.equals("jsr_w")) {
					int arg = getJumpArg(instrElems, labels, codeLength);
					ih = instructions.append(new JSR_W(null));
					instructionHandleList.add(ih);
					branches.add(new BranchPair(labels, arg));
					labels++;
				} else {
					parseException.addError(JAsmParseException.SYNTAX_ERROR,
							fullInstr, labels);
					labels++;
				}
			}
		}
		if (parseException.errorCount() > 0) {
			throw parseException;
		}

		for (int i = 0; i < lookupSwitches.size(); i++) {
			TempSwitchData tsd = (TempSwitchData) lookupSwitches.get(i);

			int targetArrSize = 0;
			for (int j = 0; j < tsd.getBranchPairs().size(); j++) {
				BranchPair bp = (BranchPair) tsd.getBranchPairs().get(j);
				if (bp.source != -1) {
					targetArrSize++;
				}
			}
			int[] targets = new int[targetArrSize];
			InstructionHandle[] targetInstrs = new InstructionHandle[targetArrSize];

			int count = 0;
			InstructionHandle defaultTarget = null;
			for (int j = 0; j < tsd.getBranchPairs().size(); j++) {
				BranchPair bp = (BranchPair) tsd.getBranchPairs().get(j);
				if (bp.source != -1) {
					targets[count] = bp.source;
					targetInstrs[count] = (InstructionHandle) instructionHandleList
							.get(bp.target - 1);
					count++;
				} else {
					defaultTarget = (InstructionHandle) instructionHandleList
							.get(bp.target - 1);
				}
			}

			LOOKUPSWITCH lus = (LOOKUPSWITCH) tsd.ih.getInstruction();
			lus.setMatchesTargets(targets, targetInstrs);
			lus.setTarget(defaultTarget);

		}
		
		for (int i = 0; i < tableSwitches.size(); i++) {
			TempSwitchData tsd = (TempSwitchData) tableSwitches.get(i);

			int targetArrSize = 0;
			for (int j = 0; j < tsd.getBranchPairs().size(); j++) {
				BranchPair bp = (BranchPair) tsd.getBranchPairs().get(j);
				if (bp.source != -1) {
					targetArrSize++;
				}
			}
			int[] targets = new int[targetArrSize];
			InstructionHandle[] targetInstrs = new InstructionHandle[targetArrSize];

			int count = 0;
			InstructionHandle defaultTarget = null;
			for (int j = 0; j < tsd.getBranchPairs().size(); j++) {
				BranchPair bp = (BranchPair) tsd.getBranchPairs().get(j);
				if (bp.source != -1) {
					targets[count] = bp.source;
					targetInstrs[count] = (InstructionHandle) instructionHandleList
							.get(bp.target - 1);
					count++;
				} else {
					defaultTarget = (InstructionHandle) instructionHandleList
							.get(bp.target - 1);
				}
			}

			TABLESWITCH ts = (TABLESWITCH) tsd.ih.getInstruction();
			ts.setMatchesTargets(targets, targetInstrs);
			ts.setTarget(defaultTarget);

		}
		for (int i = 0; i < branches.size(); i++) {
			BranchPair bp = (BranchPair) branches.get(i);
			ih = (InstructionHandle) instructionHandleList.get(bp.source);

			if (ih.getInstruction() instanceof GotoInstruction) {
				GotoInstruction jInst = (GotoInstruction) ih.getInstruction();
				jInst.setTarget((InstructionHandle) instructionHandleList
						.get(bp.target - 1));
			} else {
				IfInstruction jInst = (IfInstruction) ih.getInstruction();
				jInst.setTarget((InstructionHandle) instructionHandleList
						.get(bp.target - 1));
			}

		}

		return instructions;
	}

	private boolean isDefaultLine(String arg) {
		String[] args = arg.split(":");
		if (args.length == 2 & args[0].trim().equals("default")) {
			return true;
		}
		return false;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -