本文整理汇总了Java中org.jf.dexlib2.iface.instruction.OffsetInstruction类的典型用法代码示例。如果您正苦于以下问题:Java OffsetInstruction类的具体用法?Java OffsetInstruction怎么用?Java OffsetInstruction使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
OffsetInstruction类属于org.jf.dexlib2.iface.instruction包,在下文中一共展示了OffsetInstruction类的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: makeInstructionFormatMethodItem
import org.jf.dexlib2.iface.instruction.OffsetInstruction; //导入依赖的package包/类
public static InstructionMethodItem makeInstructionFormatMethodItem(
MethodDefinition methodDef, int codeAddress, Instruction instruction) {
if (instruction instanceof OffsetInstruction) {
return new OffsetInstructionFormatMethodItem(methodDef.classDef.options, methodDef, codeAddress,
(OffsetInstruction)instruction);
}
if (instruction instanceof UnresolvedOdexInstruction) {
return new UnresolvedOdexInstructionMethodItem(methodDef, codeAddress,
(UnresolvedOdexInstruction)instruction);
}
switch (instruction.getOpcode().format) {
case ArrayPayload:
return new ArrayDataMethodItem(methodDef, codeAddress, (ArrayPayload)instruction);
case PackedSwitchPayload:
return new PackedSwitchMethodItem(methodDef, codeAddress, (PackedSwitchPayload)instruction);
case SparseSwitchPayload:
return new SparseSwitchMethodItem(methodDef, codeAddress, (SparseSwitchPayload)instruction);
default:
return new InstructionMethodItem<Instruction>(methodDef, codeAddress, instruction);
}
}
示例2: OffsetInstructionFormatMethodItem
import org.jf.dexlib2.iface.instruction.OffsetInstruction; //导入依赖的package包/类
public OffsetInstructionFormatMethodItem(@Nonnull baksmaliOptions options, @Nonnull MethodDefinition methodDef,
int codeAddress, OffsetInstruction instruction) {
super(methodDef, codeAddress, instruction);
label = new LabelMethodItem(options, codeAddress + instruction.getCodeOffset(), getLabelPrefix());
label = methodDef.getLabelCache().internLabel(label);
}
示例3: deferredJimplify
import org.jf.dexlib2.iface.instruction.OffsetInstruction; //导入依赖的package包/类
public void deferredJimplify(DexBody body) {
int keyRegister = ((OneRegisterInstruction) instruction).getRegisterA();
int offset = ((OffsetInstruction) instruction).getCodeOffset();
Local key = body.getRegisterLocal(keyRegister);
int targetAddress = codeAddress + offset;
Instruction targetData = body.instructionAtAddress(targetAddress).instruction;
Stmt stmt = switchStatement(body, targetData, key);
body.getBody().getUnits().insertAfter(stmt, markerUnit);
}
示例4: getTargetInstruction
import org.jf.dexlib2.iface.instruction.OffsetInstruction; //导入依赖的package包/类
protected DexlibAbstractInstruction getTargetInstruction(DexBody body) {
int offset = ((OffsetInstruction) instruction).getCodeOffset();
int targetAddress = codeAddress + offset;
targetInstruction = body.instructionAtAddress(targetAddress);
return targetInstruction;
}
示例5: parseDestinations
import org.jf.dexlib2.iface.instruction.OffsetInstruction; //导入依赖的package包/类
private boolean parseDestinations(BasicBlockInstruction bbinsn, List<Integer> leaders, Map<Integer, Integer> switchMap) {
int offset = -1;
switch(bbinsn.instruction.getOpcode()) {
case PACKED_SWITCH_PAYLOAD: // switch payloads
case SPARSE_SWITCH_PAYLOAD:
Integer sourceAddress = switchMap.get(bbinsn.address);
if(sourceAddress != null) {
for(SwitchElement switchElement : ((SwitchPayload) bbinsn.instruction).getSwitchElements()){
offset = switchElement.getOffset() + (int)sourceAddress;
if(bbinsn.destinations == null)
bbinsn.destinations = new ArrayList<Integer>();
bbinsn.destinations.add(offset);
if(!leaders.contains(offset))
leaders.add(offset);
}
}
break;
case RETURN_VOID: // returns
case RETURN:
case RETURN_WIDE:
case RETURN_OBJECT:
break;
case GOTO: // gotos
case GOTO_16:
case GOTO_32:
if(bbinsn.destinations == null)
bbinsn.destinations = new ArrayList<Integer>();
offset = ((OffsetInstruction) bbinsn.instruction).getCodeOffset() + bbinsn.address;
bbinsn.destinations.add(offset);
if(!leaders.contains(offset))
leaders.add(offset);
break;
case PACKED_SWITCH: // switches (to payload)
case SPARSE_SWITCH:
offset = ((OffsetInstruction) bbinsn.instruction).getCodeOffset();
switchMap.put(bbinsn.address+offset, bbinsn.address);
case IF_EQ: // ifs reg cmp reg
case IF_NE:
case IF_LT:
case IF_GE:
case IF_GT:
case IF_LE:
case IF_EQZ: // ifs reg cmp zero
case IF_NEZ:
case IF_LTZ:
case IF_GEZ:
case IF_GTZ:
case IF_LEZ:
if(bbinsn.destinations == null)
bbinsn.destinations = new ArrayList<Integer>();
offset = ((OffsetInstruction) bbinsn.instruction).getCodeOffset() + bbinsn.address;
if(!leaders.contains(offset))
leaders.add(offset);
bbinsn.destinations.add(offset);
offset = bbinsn.address + bbinsn.instruction.getCodeUnits();
if(!leaders.contains(offset))
leaders.add(offset);
bbinsn.destinations.add(offset);
break;
}
return true;
}