zhkl0228 / unidbg

Allows you to emulate an Android native library, and an experimental iOS emulation
Apache License 2.0
3.64k stars 924 forks source link

fix: Avoid divide-by-zero exceptions #645

Closed zmer007 closed 2 weeks ago

zmer007 commented 2 weeks ago

sample code

    public AntiOllvm() {
        emulator = AndroidEmulatorBuilder
                .for64Bit()
                .addBackendFactory(new Unicorn2Factory(true))
                .setProcessName("com.lgd.test")
                .build();
        Memory memory = emulator.getMemory();
        memory.setLibraryResolver(new AndroidResolver(31));
        vm = emulator.createDalvikVM();
        loadDepsLibs(vm);
        vm.setVerbose(true);
        dm = vm.loadLibrary(new File(SO_ROOT_DIR + "/libhelloollvm.so"), false);
        module = dm.getModule();
    }

    private void loadDepsLibs(VM vm) {
        vm.loadLibrary(new File(SO_LIB_DIR + "/libandroid.so"), false);
        vm.loadLibrary(new File(SO_LIB_DIR + "/liblog.so"), false);
        vm.loadLibrary(new File(SO_LIB_DIR + "/libm.so"), false);
        vm.loadLibrary(new File(SO_LIB_DIR + "/libdl.so"), false);
        vm.loadLibrary(new File(SO_LIB_DIR + "/libc.so"), false);
    }

error log

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at net.fornwall.jelf.ElfDynamicStructure.<init>(ElfDynamicStructure.java:327)
    at net.fornwall.jelf.ElfSegment$3.computeValue(ElfSegment.java:153)
    at net.fornwall.jelf.ElfSegment$3.computeValue(ElfSegment.java:150)
    at net.fornwall.jelf.MemoizedObject.getValue(MemoizedObject.java:21)
    at net.fornwall.jelf.ElfSegment.getDynamicStructure(ElfSegment.java:255)
    at com.github.unidbg.linux.AndroidElfLoader.loadInternal(AndroidElfLoader.java:434)