Java Code Examples for org.jf.dexlib2.util.TypeUtils#isWideType()

The following examples show how to use org.jf.dexlib2.util.TypeUtils#isWideType() . These examples are extracted from open source projects. 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 Project: ZjDroid   File: MethodAnalyzer.java    License: Apache License 2.0 5 votes vote down vote up
private void propagateParameterTypes(int parameterStartRegister) {
    int i=0;
    for (MethodParameter parameter: method.getParameters()) {
        if (TypeUtils.isWideType(parameter)) {
            setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++,
                    RegisterType.getWideRegisterType(parameter, true));
            setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++,
                    RegisterType.getWideRegisterType(parameter, false));
        } else {
            setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++,
                    RegisterType.getRegisterType(classPath, parameter));
        }
    }
}
 
Example 2
Source Project: ZjDroid   File: MethodDefinition.java    License: Apache License 2.0 5 votes vote down vote up
private static void writeParameters(IndentingWriter writer, Method method,
                                    List<? extends MethodParameter> parameters,
                                    baksmaliOptions options) throws IOException {
    boolean isStatic = AccessFlags.STATIC.isSet(method.getAccessFlags());
    int registerNumber = isStatic?0:1;
    for (MethodParameter parameter: parameters) {
        String parameterType = parameter.getType();
        String parameterName = parameter.getName();
        Collection<? extends Annotation> annotations = parameter.getAnnotations();
        if (parameterName != null || annotations.size() != 0) {
            writer.write(".param p");
            writer.printSignedIntAsDec(registerNumber);

            if (parameterName != null && options.outputDebugInfo) {
                writer.write(", ");
                ReferenceFormatter.writeStringReference(writer, parameterName);
            }
            writer.write("    # ");
            writer.write(parameterType);
            writer.write("\n");
            if (annotations.size() > 0) {
                writer.indent(4);
                AnnotationFormatter.writeTo(writer, annotations);
                writer.deindent(4);
                writer.write(".end param\n");
            }
        }

        registerNumber++;
        if (TypeUtils.isWideType(parameterType)) {
            registerNumber++;
        }
    }
}
 
Example 3
Source Project: atlas   File: MethodDefinition.java    License: Apache License 2.0 5 votes vote down vote up
private static void writeParameters(IndentingWriter writer, Method method,
                                    List<? extends MethodParameter> parameters,
                                    BaksmaliOptions options) throws IOException {
    boolean isStatic = AccessFlags.STATIC.isSet(method.getAccessFlags());
    int registerNumber = isStatic ? 0 : 1;
    for (MethodParameter parameter : parameters) {
        String parameterType = parameter.getType();
        String parameterName = parameter.getName();
        Collection<? extends Annotation> annotations = parameter.getAnnotations();
        if (parameterName != null || annotations.size() != 0) {
            writer.write(".param p");
            writer.printSignedIntAsDec(registerNumber);

            if (parameterName != null && options.debugInfo) {
                writer.write(", ");
                ReferenceFormatter.writeStringReference(writer, parameterName);
            }
            writer.write("    # ");
            writer.write(parameterType);
            writer.write("\n");
            if (annotations.size() > 0) {
                writer.indent(4);

                String containingClass = null;
                if (options.implicitReferences) {
                    containingClass = method.getDefiningClass();
                }
                AnnotationFormatter.writeTo(writer, annotations, containingClass);
                writer.deindent(4);
                writer.write(".end param\n");
            }
        }

        registerNumber++;
        if (TypeUtils.isWideType(parameterType)) {
            registerNumber++;
        }
    }
}
 
Example 4
Source Project: zjdroid   File: MethodAnalyzer.java    License: Apache License 2.0 5 votes vote down vote up
private void propagateParameterTypes(int parameterStartRegister) {
    int i=0;
    for (MethodParameter parameter: method.getParameters()) {
        if (TypeUtils.isWideType(parameter)) {
            setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++,
                    RegisterType.getWideRegisterType(parameter, true));
            setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++,
                    RegisterType.getWideRegisterType(parameter, false));
        } else {
            setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++,
                    RegisterType.getRegisterType(classPath, parameter));
        }
    }
}
 
Example 5
Source Project: zjdroid   File: MethodDefinition.java    License: Apache License 2.0 5 votes vote down vote up
private static void writeParameters(IndentingWriter writer, Method method,
                                    List<? extends MethodParameter> parameters,
                                    baksmaliOptions options) throws IOException {
    boolean isStatic = AccessFlags.STATIC.isSet(method.getAccessFlags());
    int registerNumber = isStatic?0:1;
    for (MethodParameter parameter: parameters) {
        String parameterType = parameter.getType();
        String parameterName = parameter.getName();
        Collection<? extends Annotation> annotations = parameter.getAnnotations();
        if (parameterName != null || annotations.size() != 0) {
            writer.write(".param p");
            writer.printSignedIntAsDec(registerNumber);

            if (parameterName != null && options.outputDebugInfo) {
                writer.write(", ");
                ReferenceFormatter.writeStringReference(writer, parameterName);
            }
            writer.write("    # ");
            writer.write(parameterType);
            writer.write("\n");
            if (annotations.size() > 0) {
                writer.indent(4);
                AnnotationFormatter.writeTo(writer, annotations);
                writer.deindent(4);
                writer.write(".end param\n");
            }
        }

        registerNumber++;
        if (TypeUtils.isWideType(parameterType)) {
            registerNumber++;
        }
    }
}
 
Example 6
Source Project: HeyGirl   File: MethodAnalyzer.java    License: Apache License 2.0 5 votes vote down vote up
private void propagateParameterTypes(int parameterStartRegister) {
    int i=0;
    for (MethodParameter parameter: method.getParameters()) {
        if (TypeUtils.isWideType(parameter)) {
            setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++,
                    RegisterType.getWideRegisterType(parameter, true));
            setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++,
                    RegisterType.getWideRegisterType(parameter, false));
        } else {
            setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++,
                    RegisterType.getRegisterType(classPath, parameter));
        }
    }
}
 
Example 7
Source Project: HeyGirl   File: MethodDefinition.java    License: Apache License 2.0 5 votes vote down vote up
private static void writeParameters(IndentingWriter writer, Method method,
                                    List<? extends MethodParameter> parameters,
                                    baksmaliOptions options) throws IOException {
    boolean isStatic = AccessFlags.STATIC.isSet(method.getAccessFlags());
    int registerNumber = isStatic?0:1;
    for (MethodParameter parameter: parameters) {
        String parameterType = parameter.getType();
        String parameterName = parameter.getName();
        Collection<? extends Annotation> annotations = parameter.getAnnotations();
        if (parameterName != null || annotations.size() != 0) {
            writer.write(".param p");
            writer.printSignedIntAsDec(registerNumber);

            if (parameterName != null && options.outputDebugInfo) {
                writer.write(", ");
                ReferenceFormatter.writeStringReference(writer, parameterName);
            }
            writer.write("    # ");
            writer.write(parameterType);
            writer.write("\n");
            if (annotations.size() > 0) {
                writer.indent(4);
                AnnotationFormatter.writeTo(writer, annotations);
                writer.deindent(4);
                writer.write(".end param\n");
            }
        }

        registerNumber++;
        if (TypeUtils.isWideType(parameterType)) {
            registerNumber++;
        }
    }
}
 
Example 8
Source Project: ZjDroid   File: MethodAnalyzer.java    License: Apache License 2.0 5 votes vote down vote up
private void propagateParameterTypes(int parameterStartRegister) {
    int i=0;
    for (MethodParameter parameter: method.getParameters()) {
        if (TypeUtils.isWideType(parameter)) {
            setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++,
                    RegisterType.getWideRegisterType(parameter, true));
            setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++,
                    RegisterType.getWideRegisterType(parameter, false));
        } else {
            setPostRegisterTypeAndPropagateChanges(startOfMethod, parameterStartRegister + i++,
                    RegisterType.getRegisterType(classPath, parameter));
        }
    }
}
 
Example 9
Source Project: ZjDroid   File: MethodDefinition.java    License: Apache License 2.0 5 votes vote down vote up
private static void writeParameters(IndentingWriter writer, Method method,
                                    List<? extends MethodParameter> parameters,
                                    baksmaliOptions options) throws IOException {
    boolean isStatic = AccessFlags.STATIC.isSet(method.getAccessFlags());
    int registerNumber = isStatic?0:1;
    for (MethodParameter parameter: parameters) {
        String parameterType = parameter.getType();
        String parameterName = parameter.getName();
        Collection<? extends Annotation> annotations = parameter.getAnnotations();
        if (parameterName != null || annotations.size() != 0) {
            writer.write(".param p");
            writer.printSignedIntAsDec(registerNumber);

            if (parameterName != null && options.outputDebugInfo) {
                writer.write(", ");
                ReferenceFormatter.writeStringReference(writer, parameterName);
            }
            writer.write("    # ");
            writer.write(parameterType);
            writer.write("\n");
            if (annotations.size() > 0) {
                writer.indent(4);
                AnnotationFormatter.writeTo(writer, annotations);
                writer.deindent(4);
                writer.write(".end param\n");
            }
        }

        registerNumber++;
        if (TypeUtils.isWideType(parameterType)) {
            registerNumber++;
        }
    }
}
 
Example 10
Source Project: ZjDroid   File: MethodDefinition.java    License: Apache License 2.0 4 votes vote down vote up
public void writeTo(IndentingWriter writer) throws IOException {
    int parameterRegisterCount = 0;
    if (!AccessFlags.STATIC.isSet(method.getAccessFlags())) {
        parameterRegisterCount++;
    }

    writer.write(".method ");
    writeAccessFlags(writer, method.getAccessFlags());
    writer.write(method.getName());
    writer.write("(");
    for (MethodParameter parameter: methodParameters) {
        String type = parameter.getType();
        writer.write(type);
        parameterRegisterCount++;
        if (TypeUtils.isWideType(type)) {
            parameterRegisterCount++;
        }
    }
    writer.write(")");
    writer.write(method.getReturnType());
    writer.write('\n');

    writer.indent(4);
    if (classDef.options.useLocalsDirective) {
        writer.write(".locals ");
        writer.printSignedIntAsDec(methodImpl.getRegisterCount() - parameterRegisterCount);
    } else {
        writer.write(".registers ");
        writer.printSignedIntAsDec(methodImpl.getRegisterCount());
    }
    writer.write('\n');
    writeParameters(writer, method, methodParameters, classDef.options);

    if (registerFormatter == null) {
        registerFormatter = new RegisterFormatter(classDef.options, methodImpl.getRegisterCount(),
                parameterRegisterCount);
    }

    AnnotationFormatter.writeTo(writer, method.getAnnotations());

    writer.write('\n');

    List<MethodItem> methodItems = getMethodItems();
    for (MethodItem methodItem: methodItems) {
        if (methodItem.writeTo(writer)) {
            writer.write('\n');
        }
    }
    writer.deindent(4);
    writer.write(".end method\n");
}
 
Example 11
Source Project: atlas   File: MethodDefinition.java    License: Apache License 2.0 4 votes vote down vote up
public void writeTo(IndentingWriter writer) throws IOException {
    int parameterRegisterCount = 0;
    if (!AccessFlags.STATIC.isSet(method.getAccessFlags())) {
        parameterRegisterCount++;
    }

    writer.write(".method ");
    writeAccessFlags(writer, method.getAccessFlags());
    writer.write(method.getName());
    writer.write("(");
    for (MethodParameter parameter : methodParameters) {
        String type = parameter.getType();
        writer.write(type);
        parameterRegisterCount++;
        if (TypeUtils.isWideType(type)) {
            parameterRegisterCount++;
        }
    }
    writer.write(")");
    writer.write(method.getReturnType());
    writer.write('\n');

    writer.indent(4);
    if (classDef.options.localsDirective) {
        writer.write(".locals ");
        int registerCount = methodImpl.getRegisterCount() - parameterRegisterCount;
        writer.printSignedIntAsDec(registerCount);
    } else {
        writer.write(".registers ");
        writer.printSignedIntAsDec(methodImpl.getRegisterCount());
    }
    writer.write('\n');
    writeParameters(writer, method, methodParameters, classDef.options);

    if (registerFormatter == null) {
        registerFormatter = new RegisterFormatter(classDef.options, methodImpl.getRegisterCount(),
                parameterRegisterCount);
    }

    String containingClass = null;
    if (classDef.options.implicitReferences) {
        containingClass = method.getDefiningClass();
    }
    //如果是修改的方法,需要添加ReplaceAnnotation
    if (DexDiffInfo.modifiedMethods.contains(method)) {
        MethodReplaceAnnotation replaceAnnotation = new MethodReplaceAnnotation(method.getDefiningClass(), method.getName());
        AnnotationFormatter.writeTo(writer, method.getAnnotations(), containingClass, replaceAnnotation);
    } else {
        AnnotationFormatter.writeTo(writer, method.getAnnotations(), containingClass);
    }

    writer.write('\n');

    boolean first = true;
    boolean writeCheckCast = false;
    List<MethodItem> methodItems = getMethodItems();
    for (MethodItem methodItem : methodItems) {
        if (first) {
            first = false;
            if (!fullMethod && !(methodItem instanceof EndPrologueMethodItem) && !DexDiffInfo.addedClasses.contains(classDef.getClassDef())) {
                if (!AccessFlags.STATIC.isSet(method.getAccessFlags())) {
                    writer.write("check-cast p0, " + method.getDefiningClass());
                    writer.write('\n');
                    writeCheckCast = true;

                }
            }

        }
        if (methodItem.writeTo(writer)) {
            writer.write('\n');
        }

        if (!writeCheckCast && !fullMethod && !DexDiffInfo.addedClasses.contains(classDef.getClassDef())) {
            if (!AccessFlags.STATIC.isSet(method.getAccessFlags())) {
                if (methodItem instanceof EndPrologueMethodItem) {
                    writer.write("check-cast p0, " + method.getDefiningClass());
                    writer.write('\n');
                    writeCheckCast = true;
                }
            }


        }
    }
    writer.deindent(4);
    writer.write(".end method\n");
}
 
Example 12
Source Project: zjdroid   File: MethodDefinition.java    License: Apache License 2.0 4 votes vote down vote up
public void writeTo(IndentingWriter writer) throws IOException {
    int parameterRegisterCount = 0;
    if (!AccessFlags.STATIC.isSet(method.getAccessFlags())) {
        parameterRegisterCount++;
    }

    writer.write(".method ");
    writeAccessFlags(writer, method.getAccessFlags());
    writer.write(method.getName());
    writer.write("(");
    for (MethodParameter parameter: methodParameters) {
        String type = parameter.getType();
        writer.write(type);
        parameterRegisterCount++;
        if (TypeUtils.isWideType(type)) {
            parameterRegisterCount++;
        }
    }
    writer.write(")");
    writer.write(method.getReturnType());
    writer.write('\n');

    writer.indent(4);
    if (classDef.options.useLocalsDirective) {
        writer.write(".locals ");
        writer.printSignedIntAsDec(methodImpl.getRegisterCount() - parameterRegisterCount);
    } else {
        writer.write(".registers ");
        writer.printSignedIntAsDec(methodImpl.getRegisterCount());
    }
    writer.write('\n');
    writeParameters(writer, method, methodParameters, classDef.options);

    if (registerFormatter == null) {
        registerFormatter = new RegisterFormatter(classDef.options, methodImpl.getRegisterCount(),
                parameterRegisterCount);
    }

    AnnotationFormatter.writeTo(writer, method.getAnnotations());

    writer.write('\n');

    List<MethodItem> methodItems = getMethodItems();
    for (MethodItem methodItem: methodItems) {
        if (methodItem.writeTo(writer)) {
            writer.write('\n');
        }
    }
    writer.deindent(4);
    writer.write(".end method\n");
}
 
Example 13
Source Project: HeyGirl   File: MethodDefinition.java    License: Apache License 2.0 4 votes vote down vote up
public void writeTo(IndentingWriter writer) throws IOException {
    int parameterRegisterCount = 0;
    if (!AccessFlags.STATIC.isSet(method.getAccessFlags())) {
        parameterRegisterCount++;
    }

    writer.write(".method ");
    writeAccessFlags(writer, method.getAccessFlags());
    writer.write(method.getName());
    writer.write("(");
    for (MethodParameter parameter: methodParameters) {
        String type = parameter.getType();
        writer.write(type);
        parameterRegisterCount++;
        if (TypeUtils.isWideType(type)) {
            parameterRegisterCount++;
        }
    }
    writer.write(")");
    writer.write(method.getReturnType());
    writer.write('\n');

    writer.indent(4);
    if (classDef.options.useLocalsDirective) {
        writer.write(".locals ");
        writer.printSignedIntAsDec(methodImpl.getRegisterCount() - parameterRegisterCount);
    } else {
        writer.write(".registers ");
        writer.printSignedIntAsDec(methodImpl.getRegisterCount());
    }
    writer.write('\n');
    writeParameters(writer, method, methodParameters, classDef.options);

    if (registerFormatter == null) {
        registerFormatter = new RegisterFormatter(classDef.options, methodImpl.getRegisterCount(),
                parameterRegisterCount);
    }

    AnnotationFormatter.writeTo(writer, method.getAnnotations());

    writer.write('\n');

    List<MethodItem> methodItems = getMethodItems();
    for (MethodItem methodItem: methodItems) {
        if (methodItem.writeTo(writer)) {
            writer.write('\n');
        }
    }
    writer.deindent(4);
    writer.write(".end method\n");
}
 
Example 14
Source Project: ZjDroid   File: MethodDefinition.java    License: Apache License 2.0 4 votes vote down vote up
public void writeTo(IndentingWriter writer) throws IOException {
    int parameterRegisterCount = 0;
    if (!AccessFlags.STATIC.isSet(method.getAccessFlags())) {
        parameterRegisterCount++;
    }

    writer.write(".method ");
    writeAccessFlags(writer, method.getAccessFlags());
    writer.write(method.getName());
    writer.write("(");
    for (MethodParameter parameter: methodParameters) {
        String type = parameter.getType();
        writer.write(type);
        parameterRegisterCount++;
        if (TypeUtils.isWideType(type)) {
            parameterRegisterCount++;
        }
    }
    writer.write(")");
    writer.write(method.getReturnType());
    writer.write('\n');

    writer.indent(4);
    if (classDef.options.useLocalsDirective) {
        writer.write(".locals ");
        writer.printSignedIntAsDec(methodImpl.getRegisterCount() - parameterRegisterCount);
    } else {
        writer.write(".registers ");
        writer.printSignedIntAsDec(methodImpl.getRegisterCount());
    }
    writer.write('\n');
    writeParameters(writer, method, methodParameters, classDef.options);

    if (registerFormatter == null) {
        registerFormatter = new RegisterFormatter(classDef.options, methodImpl.getRegisterCount(),
                parameterRegisterCount);
    }

    AnnotationFormatter.writeTo(writer, method.getAnnotations());

    writer.write('\n');

    List<MethodItem> methodItems = getMethodItems();
    for (MethodItem methodItem: methodItems) {
        if (methodItem.writeTo(writer)) {
            writer.write('\n');
        }
    }
    writer.deindent(4);
    writer.write(".end method\n");
}