Java Code Examples for org.jf.dexlib2.Opcode#NOP

The following examples show how to use org.jf.dexlib2.Opcode#NOP . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: MethodDefinition.java    From ZjDroid with Apache License 2.0 5 votes vote down vote up
public int findSwitchPayload(int targetOffset, Opcode type) {
    int targetIndex;
    try {
        targetIndex = instructionOffsetMap.getInstructionIndexAtCodeOffset(targetOffset);
    } catch (InvalidInstructionOffset ex) {
        throw new InvalidSwitchPayload(targetOffset);
    }

    //TODO: does dalvik let you pad with multiple nops?
    //TODO: does dalvik let a switch instruction point to a non-payload instruction?

    Instruction instruction = instructions.get(targetIndex);
    if (instruction.getOpcode() != type) {
        // maybe it's pointing to a NOP padding instruction. Look at the next instruction
        if (instruction.getOpcode() == Opcode.NOP) {
            targetIndex += 1;
            if (targetIndex < instructions.size()) {
                instruction = instructions.get(targetIndex);
                if (instruction.getOpcode() == type) {
                    return instructionOffsetMap.getInstructionCodeOffset(targetIndex);
                }
            }
        }
        throw new InvalidSwitchPayload(targetOffset);
    } else {
        return targetOffset;
    }
}
 
Example 2
Source File: MutableMethodImplementation.java    From ZjDroid with Apache License 2.0 5 votes vote down vote up
@Nullable
private MethodLocation findSwitchForPayload(@Nonnull MethodLocation payloadLocation) {
    MethodLocation location = payloadLocation;
    MethodLocation switchLocation = null;
    do {
        for (Label label: location.getLabels()) {
            if (label instanceof SwitchPayloadReferenceLabel) {
                if (switchLocation != null) {
                    throw new IllegalStateException("Multiple switch instructions refer to the same payload. " +
                            "This is not currently supported. Please file a bug :)");
                }
                switchLocation = ((SwitchPayloadReferenceLabel)label).switchLocation;
            }
        }

        // A switch instruction can refer to the payload instruction itself, or to a nop before the payload
        // instruction.
        // We need to search for all occurrences of a switch reference, so we can detect when multiple switch
        // statements refer to the same payload
        // TODO: confirm that it could refer to the first NOP in a series of NOPs preceding the payload
        if (location.index == 0) {
            return switchLocation;
        }
        location = instructionList.get(location.index - 1);
        if (location.instruction == null || location.instruction.getOpcode() != Opcode.NOP) {
            return switchLocation;
        }
    } while (true);
}
 
Example 3
Source File: MethodDefinition.java    From ZjDroid with Apache License 2.0 5 votes vote down vote up
public int findSwitchPayload(int targetOffset, Opcode type) {
    int targetIndex;
    try {
        targetIndex = instructionOffsetMap.getInstructionIndexAtCodeOffset(targetOffset);
    } catch (InvalidInstructionOffset ex) {
        throw new InvalidSwitchPayload(targetOffset);
    }

    //TODO: does dalvik let you pad with multiple nops?
    //TODO: does dalvik let a switch instruction point to a non-payload instruction?

    Instruction instruction = instructions.get(targetIndex);
    if (instruction.getOpcode() != type) {
        // maybe it's pointing to a NOP padding instruction. Look at the next instruction
        if (instruction.getOpcode() == Opcode.NOP) {
            targetIndex += 1;
            if (targetIndex < instructions.size()) {
                instruction = instructions.get(targetIndex);
                if (instruction.getOpcode() == type) {
                    return instructionOffsetMap.getInstructionCodeOffset(targetIndex);
                }
            }
        }
        throw new InvalidSwitchPayload(targetOffset);
    } else {
        return targetOffset;
    }
}
 
Example 4
Source File: MethodDefinition.java    From atlas with Apache License 2.0 5 votes vote down vote up
public Instruction findSwitchPayload(int targetOffset, Opcode type) {
    int targetIndex;
    try {
        targetIndex = instructionOffsetMap.getInstructionIndexAtCodeOffset(targetOffset);
    } catch (InvalidInstructionOffset ex) {
        throw new InvalidSwitchPayload(targetOffset);
    }

    //TODO: does dalvik let you pad with multiple nops?
    //TODO: does dalvik let a switch instruction point to a non-payload instruction?

    Instruction instruction = instructions.get(targetIndex);
    if (instruction.getOpcode() != type) {
        // maybe it's pointing to a NOP padding instruction. Look at the next instruction
        if (instruction.getOpcode() == Opcode.NOP) {
            targetIndex += 1;
            if (targetIndex < instructions.size()) {
                instruction = instructions.get(targetIndex);
                if (instruction.getOpcode() == type) {
                    return instruction;
                }
            }
        }
        throw new InvalidSwitchPayload(targetOffset);
    } else {
        return instruction;
    }
}
 
Example 5
Source File: MethodDefinition.java    From atlas with Apache License 2.0 5 votes vote down vote up
public int findPayloadOffset(int targetOffset, Opcode type) {
    int targetIndex;
    try {
        targetIndex = instructionOffsetMap.getInstructionIndexAtCodeOffset(targetOffset);
    } catch (InvalidInstructionOffset ex) {
        throw new InvalidSwitchPayload(targetOffset);
    }

    //TODO: does dalvik let you pad with multiple nops?
    //TODO: does dalvik let a switch instruction point to a non-payload instruction?

    Instruction instruction = instructions.get(targetIndex);
    if (instruction.getOpcode() != type) {
        // maybe it's pointing to a NOP padding instruction. Look at the next instruction
        if (instruction.getOpcode() == Opcode.NOP) {
            targetIndex += 1;
            if (targetIndex < instructions.size()) {
                instruction = instructions.get(targetIndex);
                if (instruction.getOpcode() == type) {
                    return instructionOffsetMap.getInstructionCodeOffset(targetIndex);
                }
            }
        }
        throw new InvalidSwitchPayload(targetOffset);
    } else {
        return targetOffset;
    }
}
 
Example 6
Source File: MutableMethodImplementation.java    From ZjDroid with Apache License 2.0 5 votes vote down vote up
@Nullable
private MethodLocation findSwitchForPayload(@Nonnull MethodLocation payloadLocation) {
    MethodLocation location = payloadLocation;
    MethodLocation switchLocation = null;
    do {
        for (Label label: location.getLabels()) {
            if (label instanceof SwitchPayloadReferenceLabel) {
                if (switchLocation != null) {
                    throw new IllegalStateException("Multiple switch instructions refer to the same payload. " +
                            "This is not currently supported. Please file a bug :)");
                }
                switchLocation = ((SwitchPayloadReferenceLabel)label).switchLocation;
            }
        }

        // A switch instruction can refer to the payload instruction itself, or to a nop before the payload
        // instruction.
        // We need to search for all occurrences of a switch reference, so we can detect when multiple switch
        // statements refer to the same payload
        // TODO: confirm that it could refer to the first NOP in a series of NOPs preceding the payload
        if (location.index == 0) {
            return switchLocation;
        }
        location = instructionList.get(location.index - 1);
        if (location.instruction == null || location.instruction.getOpcode() != Opcode.NOP) {
            return switchLocation;
        }
    } while (true);
}
 
Example 7
Source File: MutableMethodImplementation.java    From zjdroid with Apache License 2.0 5 votes vote down vote up
@Nullable
private MethodLocation findSwitchForPayload(@Nonnull MethodLocation payloadLocation) {
    MethodLocation location = payloadLocation;
    MethodLocation switchLocation = null;
    do {
        for (Label label: location.getLabels()) {
            if (label instanceof SwitchPayloadReferenceLabel) {
                if (switchLocation != null) {
                    throw new IllegalStateException("Multiple switch instructions refer to the same payload. " +
                            "This is not currently supported. Please file a bug :)");
                }
                switchLocation = ((SwitchPayloadReferenceLabel)label).switchLocation;
            }
        }

        // A switch instruction can refer to the payload instruction itself, or to a nop before the payload
        // instruction.
        // We need to search for all occurrences of a switch reference, so we can detect when multiple switch
        // statements refer to the same payload
        // TODO: confirm that it could refer to the first NOP in a series of NOPs preceding the payload
        if (location.index == 0) {
            return switchLocation;
        }
        location = instructionList.get(location.index - 1);
        if (location.instruction == null || location.instruction.getOpcode() != Opcode.NOP) {
            return switchLocation;
        }
    } while (true);
}
 
Example 8
Source File: MethodDefinition.java    From zjdroid with Apache License 2.0 5 votes vote down vote up
public int findSwitchPayload(int targetOffset, Opcode type) {
    int targetIndex;
    try {
        targetIndex = instructionOffsetMap.getInstructionIndexAtCodeOffset(targetOffset);
    } catch (InvalidInstructionOffset ex) {
        throw new InvalidSwitchPayload(targetOffset);
    }

    //TODO: does dalvik let you pad with multiple nops?
    //TODO: does dalvik let a switch instruction point to a non-payload instruction?

    Instruction instruction = instructions.get(targetIndex);
    if (instruction.getOpcode() != type) {
        // maybe it's pointing to a NOP padding instruction. Look at the next instruction
        if (instruction.getOpcode() == Opcode.NOP) {
            targetIndex += 1;
            if (targetIndex < instructions.size()) {
                instruction = instructions.get(targetIndex);
                if (instruction.getOpcode() == type) {
                    return instructionOffsetMap.getInstructionCodeOffset(targetIndex);
                }
            }
        }
        throw new InvalidSwitchPayload(targetOffset);
    } else {
        return targetOffset;
    }
}
 
Example 9
Source File: MethodDefinition.java    From HeyGirl with Apache License 2.0 5 votes vote down vote up
public int findSwitchPayload(int targetOffset, Opcode type) {
    int targetIndex;
    try {
        targetIndex = instructionOffsetMap.getInstructionIndexAtCodeOffset(targetOffset);
    } catch (InvalidInstructionOffset ex) {
        throw new InvalidSwitchPayload(targetOffset);
    }

    //TODO: does dalvik let you pad with multiple nops?
    //TODO: does dalvik let a switch instruction point to a non-payload instruction?

    Instruction instruction = instructions.get(targetIndex);
    if (instruction.getOpcode() != type) {
        // maybe it's pointing to a NOP padding instruction. Look at the next instruction
        if (instruction.getOpcode() == Opcode.NOP) {
            targetIndex += 1;
            if (targetIndex < instructions.size()) {
                instruction = instructions.get(targetIndex);
                if (instruction.getOpcode() == type) {
                    return instructionOffsetMap.getInstructionCodeOffset(targetIndex);
                }
            }
        }
        throw new InvalidSwitchPayload(targetOffset);
    } else {
        return targetOffset;
    }
}
 
Example 10
Source File: MutableMethodImplementation.java    From HeyGirl with Apache License 2.0 5 votes vote down vote up
@Nullable
private MethodLocation findSwitchForPayload(@Nonnull MethodLocation payloadLocation) {
    MethodLocation location = payloadLocation;
    MethodLocation switchLocation = null;
    do {
        for (Label label: location.getLabels()) {
            if (label instanceof SwitchPayloadReferenceLabel) {
                if (switchLocation != null) {
                    throw new IllegalStateException("Multiple switch instructions refer to the same payload. " +
                            "This is not currently supported. Please file a bug :)");
                }
                switchLocation = ((SwitchPayloadReferenceLabel)label).switchLocation;
            }
        }

        // A switch instruction can refer to the payload instruction itself, or to a nop before the payload
        // instruction.
        // We need to search for all occurrences of a switch reference, so we can detect when multiple switch
        // statements refer to the same payload
        // TODO: confirm that it could refer to the first NOP in a series of NOPs preceding the payload
        if (location.index == 0) {
            return switchLocation;
        }
        location = instructionList.get(location.index - 1);
        if (location.instruction == null || location.instruction.getOpcode() != Opcode.NOP) {
            return switchLocation;
        }
    } while (true);
}
 
Example 11
Source File: AddressInsn.java    From JAADAS with GNU General Public License v3.0 4 votes vote down vote up
public AddressInsn(Object originalSource) {
	super(Opcode.NOP);
	this.originalSource = originalSource;
}
 
Example 12
Source File: DexBackedUnknownInstruction.java    From ZjDroid with Apache License 2.0 4 votes vote down vote up
public DexBackedUnknownInstruction(@Nonnull DexBackedDexFile dexFile,
                                   int instructionStart) {
    super(dexFile, Opcode.NOP, instructionStart);
}
 
Example 13
Source File: ImmutableUnknownInstruction.java    From ZjDroid with Apache License 2.0 4 votes vote down vote up
public ImmutableUnknownInstruction(int originalOpcode) {
    super(Opcode.NOP);
    this.originalOpcode = originalOpcode;
}
 
Example 14
Source File: DexBackedUnknownInstruction.java    From HeyGirl with Apache License 2.0 4 votes vote down vote up
public DexBackedUnknownInstruction(@Nonnull DexBackedDexFile dexFile,
                                   int instructionStart) {
    super(dexFile, Opcode.NOP, instructionStart);
}
 
Example 15
Source File: ImmutableUnknownInstruction.java    From HeyGirl with Apache License 2.0 4 votes vote down vote up
public ImmutableUnknownInstruction(int originalOpcode) {
    super(Opcode.NOP);
    this.originalOpcode = originalOpcode;
}
 
Example 16
Source File: SwitchPayload.java    From JAADAS with GNU General Public License v3.0 4 votes vote down vote up
public SwitchPayload(List<Unit> targets) {
	super(Opcode.NOP);
	this.targets = targets;
}
 
Example 17
Source File: ImmutableUnknownInstruction.java    From ZjDroid with Apache License 2.0 4 votes vote down vote up
public ImmutableUnknownInstruction(int originalOpcode) {
    super(Opcode.NOP);
    this.originalOpcode = originalOpcode;
}
 
Example 18
Source File: DexBackedUnknownInstruction.java    From zjdroid with Apache License 2.0 4 votes vote down vote up
public DexBackedUnknownInstruction(@Nonnull DexBackedDexFile dexFile,
                                   int instructionStart) {
    super(dexFile, Opcode.NOP, instructionStart);
}
 
Example 19
Source File: ImmutableUnknownInstruction.java    From zjdroid with Apache License 2.0 4 votes vote down vote up
public ImmutableUnknownInstruction(int originalOpcode) {
    super(Opcode.NOP);
    this.originalOpcode = originalOpcode;
}
 
Example 20
Source File: DexBackedUnknownInstruction.java    From ZjDroid with Apache License 2.0 4 votes vote down vote up
public DexBackedUnknownInstruction(@Nonnull DexBackedDexFile dexFile,
                                   int instructionStart) {
    super(dexFile, Opcode.NOP, instructionStart);
}