本文整理汇总了Java中org.jf.dexlib2.builder.MutableMethodImplementation类的典型用法代码示例。如果您正苦于以下问题:Java MutableMethodImplementation类的具体用法?Java MutableMethodImplementation怎么用?Java MutableMethodImplementation使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
MutableMethodImplementation类属于org.jf.dexlib2.builder包,在下文中一共展示了MutableMethodImplementation类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: reDexMethods
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
private static List<Method> reDexMethods(@Nonnull ClassDef classDef) {
List<Method> taintedMethods = Lists.newArrayList();
for (Method method : classDef.getMethods()) {
MethodImplementation implementation = method.getImplementation();
MutableMethodImplementation mutableImplementation = new MutableMethodImplementation(implementation);
taintedMethods.add(new ImmutableMethod(
method.getDefiningClass(),
method.getName(),
method.getParameters(),
method.getReturnType(),
method.getAccessFlags(),
method.getAnnotations(),
mutableImplementation));
}
return taintedMethods;
}
示例2: fixInstructions
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
private void fixInstructions(@Nonnull MutableMethodImplementation methodImplementation) {
List<? extends Instruction> instructions = methodImplementation.getInstructions();
for (int i=0; i<instructions.size(); i++) {
Instruction instruction = instructions.get(i);
if (instruction.getOpcode() == Opcode.CONST_STRING) {
if (stringSection.getItemIndex(
(StringRef)((ReferenceInstruction)instruction).getReference()) >= 65536) {
methodImplementation.replaceInstruction(i, new BuilderInstruction31c(Opcode.CONST_STRING_JUMBO,
((OneRegisterInstruction)instruction).getRegisterA(),
((ReferenceInstruction)instruction).getReference()));
}
}
}
}
示例3: fixInstructions
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
private void fixInstructions( MutableMethodImplementation methodImplementation) {
List<? extends Instruction> instructions = methodImplementation.getInstructions();
for (int i=0; i<instructions.size(); i++) {
Instruction instruction = instructions.get(i);
if (instruction.getOpcode() == Opcode.CONST_STRING) {
if (stringSection.getItemIndex(
(StringRef)((ReferenceInstruction)instruction).getReference()) >= 65536) {
methodImplementation.replaceInstruction(i, new BuilderInstruction31c(Opcode.CONST_STRING_JUMBO,
((OneRegisterInstruction)instruction).getRegisterA(),
((ReferenceInstruction)instruction).getReference()));
}
}
}
}
示例4: fixInstructions
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
private void fixInstructions(@Nonnull MutableMethodImplementation methodImplementation) {
List<? extends Instruction> instructions = methodImplementation.getInstructions();
for (int i = 0; i < instructions.size(); i++) {
Instruction instruction = instructions.get(i);
if (instruction.getOpcode() == Opcode.CONST_STRING) {
if (stringSection.getItemIndex(
(StringRef) ((ReferenceInstruction) instruction).getReference()) >= 65536) {
methodImplementation.replaceInstruction(i, new BuilderInstruction31c(Opcode.CONST_STRING_JUMBO,
((OneRegisterInstruction) instruction).getRegisterA(),
((ReferenceInstruction) instruction).getReference()));
}
}
}
}
示例5: main
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
public static void main(String argv[]){
Configure configure = new Configure(add_path, "test.dex");
try {
MethodWithoutParams method = new MethodWithoutParams(configure);
method.initMethod("Lcom/cc/test/Hello;",
"<clinit>", new ModifyMethodWitoutParams() {
@Override
public void modify(MutableMethodImplementation impl, DexBackedDexFile dexfile) {
// TODO Auto-generated method stub
impl.addInstruction(0, InstructionBuilder.newConstStringIns(0,
"com.cc.test"));
impl.addInstruction(1, InstructionBuilder.newConst4Ins(1, 0));
impl.addInstruction(2, InstructionBuilder.newInvokeStaticIns(2,
0, 1, 0, 0, 0, "Lcom/cc/test/ProxyShell;", "startshell", dexfile));
if (impl.getRegisterCount() < 2)
impl.setRegisterCount(2);
}
});
method.modify();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
示例6: modifyMethodAndFix
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
private static MethodImplementation modifyMethodAndFix(@Nonnull MethodImplementation implementation, Method method) {
MutableMethodImplementation mutableImplementation = new MutableMethodImplementation(implementation);
System.out.println(mutableImplementation.getRegisterCount());
List<BuilderInstruction> instructions = mutableImplementation.getInstructions();
mutableImplementation.addInstruction(0,
new BuilderInstruction21c(Opcode.CONST_STRING, 0,
new ImmutableStringReference("AndFix:" + method.getDefiningClass().replace("/", "."))));
mutableImplementation.addInstruction(1,
new BuilderInstruction35c(Opcode.INVOKE_STATIC, 1,
0, 0, 0, 0, 0,
new ImmutableMethodReference("Landroid/util/Log;", "e",
Lists.newArrayList("Ljava/lang/String;", "Ljava/lang/String;"), "I")));
return mutableImplementation;
}
示例7: modifyMethodTpatch
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
private static MethodImplementation modifyMethodTpatch(@Nonnull MethodImplementation implementation, Method method) {
MutableMethodImplementation mutableImplementation = new MutableMethodImplementation(implementation);
System.out.println(mutableImplementation.getRegisterCount());
List<BuilderInstruction> instructions = mutableImplementation.getInstructions();
boolean isModified = false;
for (int i = 0; i < instructions.size(); i++) {
isModified = false;
if (instructions.get(i).getOpcode() == Opcode.INVOKE_DIRECT) {
if (!isModified) {
mutableImplementation.addInstruction(i++,
new BuilderInstruction21c(Opcode.CONST_STRING, 0,
new ImmutableStringReference("tpatch:" + method.getDefiningClass().replace("/", "."))));
mutableImplementation.addInstruction(i++,
new BuilderInstruction35c(Opcode.INVOKE_STATIC, 1,
0, 0, 0, 0, 0,
new ImmutableMethodReference("Landroid/util/Log;", "e",
Lists.newArrayList("Ljava/lang/String;", "Ljava/lang/String;"), "I")));
isModified = true;
break;
}
}
// mutableImplementation.addInstruction(instructions.get(i));
}
return mutableImplementation;
}
示例8: makeMutableMethodImplementation
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
@Nonnull @Override
public MutableMethodImplementation makeMutableMethodImplementation(@Nonnull BuilderMethod builderMethod) {
MethodImplementation impl = builderMethod.getImplementation();
if (impl instanceof MutableMethodImplementation) {
return (MutableMethodImplementation)impl;
}
return new MutableMethodImplementation(impl);
}
示例9: makeMutableMethodImplementation
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
@Override
public MutableMethodImplementation makeMutableMethodImplementation( BuilderMethod builderMethod) {
MethodImplementation impl = builderMethod.getImplementation();
if (impl instanceof MutableMethodImplementation) {
return (MutableMethodImplementation)impl;
}
return new MutableMethodImplementation(impl);
}
示例10: makeMutableMethodImplementation
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
@Nonnull
@Override
public MutableMethodImplementation makeMutableMethodImplementation(@Nonnull BuilderMethod builderMethod) {
MethodImplementation impl = builderMethod.getImplementation();
if (impl instanceof MutableMethodImplementation) {
return (MutableMethodImplementation) impl;
}
return new MutableMethodImplementation(impl);
}
示例11: getMethodImplementationRewriter
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
public Rewriter<MethodImplementation> getMethodImplementationRewriter(@Nonnull Rewriters rewriters) {
return new MethodImplementationRewriter(rewriters){
public MethodImplementation rewrite(@Nonnull MethodImplementation methodImplementation) {
MutableMethodImplementation builder = new MutableMethodImplementation(methodImplementation);
mListener.modify(builder, dexFile);
return builder;
}
};
}
示例12: writeDebugAndCodeItems
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
private void writeDebugAndCodeItems(@Nonnull DexDataWriter offsetWriter,
@Nonnull DeferredOutputStream temp) throws IOException {
ByteArrayOutputStream ehBuf = new ByteArrayOutputStream();
debugSectionOffset = offsetWriter.getPosition();
DebugWriter<StringKey, TypeKey> debugWriter =
new DebugWriter<StringKey, TypeKey>(stringSection, typeSection, offsetWriter);
DexDataWriter codeWriter = new DexDataWriter(temp, 0);
List<CodeItemOffset<MethodKey>> codeOffsets = Lists.newArrayList();
for (ClassKey classKey: classSection.getSortedClasses()) {
Collection<? extends MethodKey> directMethods = classSection.getSortedDirectMethods(classKey);
Collection<? extends MethodKey> virtualMethods = classSection.getSortedVirtualMethods(classKey);
Iterable<MethodKey> methods = Iterables.concat(directMethods, virtualMethods);
for (MethodKey methodKey: methods) {
List<? extends TryBlock<? extends ExceptionHandler>> tryBlocks =
classSection.getTryBlocks(methodKey);
Iterable<? extends Instruction> instructions = classSection.getInstructions(methodKey);
Iterable<? extends DebugItem> debugItems = classSection.getDebugItems(methodKey);
if (instructions != null && stringSection.hasJumboIndexes()) {
boolean needsFix = false;
for (Instruction instruction: instructions) {
if (instruction.getOpcode() == Opcode.CONST_STRING) {
if (stringSection.getItemIndex(
(StringRef)((ReferenceInstruction)instruction).getReference()) >= 65536) {
needsFix = true;
break;
}
}
}
if (needsFix) {
MutableMethodImplementation mutableMethodImplementation =
classSection.makeMutableMethodImplementation(methodKey);
fixInstructions(mutableMethodImplementation);
instructions = mutableMethodImplementation.getInstructions();
tryBlocks = mutableMethodImplementation.getTryBlocks();
debugItems = mutableMethodImplementation.getDebugItems();
}
}
int debugItemOffset = writeDebugItem(offsetWriter, debugWriter,
classSection.getParameterNames(methodKey), debugItems);
int codeItemOffset = writeCodeItem(codeWriter, ehBuf, methodKey, tryBlocks, instructions, debugItemOffset);
if (codeItemOffset != -1) {
codeOffsets.add(new CodeItemOffset<MethodKey>(methodKey, codeItemOffset));
}
}
}
offsetWriter.align();
codeSectionOffset = offsetWriter.getPosition();
codeWriter.close();
temp.writeTo(offsetWriter);
temp.close();
for (CodeItemOffset<MethodKey> codeOffset: codeOffsets) {
classSection.setCodeItemOffset(codeOffset.method, codeSectionOffset + codeOffset.codeOffset);
}
}
示例13: makeMutableMethodImplementation
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
@Nonnull @Override
public MutableMethodImplementation makeMutableMethodImplementation(@Nonnull PoolMethod poolMethod) {
return new MutableMethodImplementation(poolMethod.getImplementation());
}
示例14: MethodNode
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
public MethodNode(@Nonnull Method method) {
this.method = method;
this.methodData = new MutableMethodImplementation(method.getImplementation());
}
示例15: getMethodData
import org.jf.dexlib2.builder.MutableMethodImplementation; //导入依赖的package包/类
public MutableMethodImplementation getMethodData() {
return methodData;
}