本文整理汇总了Java中org.jf.dexlib2.iface.instruction.SwitchPayload类的典型用法代码示例。如果您正苦于以下问题:Java SwitchPayload类的具体用法?Java SwitchPayload怎么用?Java SwitchPayload使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
SwitchPayload类属于org.jf.dexlib2.iface.instruction包,在下文中一共展示了SwitchPayload类的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。
示例1: parseDestinations
import org.jf.dexlib2.iface.instruction.SwitchPayload; //导入依赖的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;
}
开发者ID:douggard,项目名称:CFGScanDroid,代码行数:68,代码来源:ControlFlowGraph.java
注:本文中的org.jf.dexlib2.iface.instruction.SwitchPayload类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论