Skip to content

加载so 有重叠段 报错 UnsupportedOperationException #753

@shandongdacongge

Description

@shandongdacongge
Image

代码如下:

package com.test;

import com.github.unidbg.AndroidEmulator;
import com.github.unidbg.Emulator;
import com.github.unidbg.Module;
import com.github.unidbg.arm.backend.DynarmicFactory;
import com.github.unidbg.file.FileResult;
import com.github.unidbg.file.IOResolver;
import com.github.unidbg.linux.android.AndroidEmulatorBuilder;
import com.github.unidbg.linux.android.AndroidResolver;
import com.github.unidbg.linux.android.dvm.*;
import com.github.unidbg.linux.android.dvm.jni.ProxyDvmObject;
import com.github.unidbg.memory.Memory;
import com.github.unidbg.virtualmodule.android.AndroidModule;
import com.github.unidbg.virtualmodule.android.JniGraphics;

import java.io.File;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class ConvertLib extends AbstractJni implements IOResolver {  

    private static AndroidEmulator emulator;
    private static VM vm;
    public static DvmClass JNICLibrary;
    public static int input;
    public static String result;
    private final Module module;
    private final Module netsecMOdule = null;
    final String PACKAGE_NAME = "com.t.app.main";
    private static final String APK_PATH = "D:\\Download\\t3.2.5.apk";
    private static final String LIB_PATH = "D:\\Download\\libconvert.so"; 

    public ConvertLib() {
        emulator = AndroidEmulatorBuilder.for64Bit()
                .setProcessName(PACKAGE_NAME)
                .build();
        final Memory memory = emulator.getMemory();
        memory.setLibraryResolver(new AndroidResolver(23));
        vm = emulator.createDalvikVM(new File(APK_PATH));
        vm.setJni(this);
        vm.setVerbose(true);
        new JniGraphics(emulator, vm).register(memory);

        // DalvikModule dm0 = vm.loadLibrary(new File(LIB_PATH_NE), true);
        emulator.getMemory().setLibraryResolver(new AndroidResolver(23));
        DalvikModule dm = vm.loadLibrary(new File(LIB_PATH), false);
        dm.callJNI_OnLoad(emulator);
        module = dm.getModule();

        new AndroidModule(emulator, vm).register(memory);

        JNICLibrary = vm.resolveClass("com.t.libconvert.ConvertLib");
    }

    public void sign() {
        DvmObject<?> result = JNICLibrary.callStaticJniMethodObject(emulator, "getA(Ljava/lang/String;I)Ljava/lang/String;");
        System.out.println(result.getValue().toString()); // getStringB()Ljava/lang/String;
    }

    @Override
    public FileResult resolve(Emulator emulator, String pathname, int i) {
        System.out.println(pathname);
        return null;
    }

    public static void main(String[] args) {
        ConvertLib convertLib = new ConvertLib();
        convertLib.sign();
    }

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions