zhkl0228 / unidbg

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

unidbg 打包 运行卡这里不动了 #230

Open Jacobi2017 opened 3 years ago

Jacobi2017 commented 3 years ago

021-01-26 00:04:24.931 WARN 26808 --- [0.0-9090-exec-3] com.github.unidbg.AbstractEmulator : emulate RX@0x40057fa5[libcms.so]0x57fa5 exception sp=unidbg@0xbffff040, msg=java/lang/Thread->currentThread()Ljava/lang/Thread;, offset=39ms 2021-01-26 00:04:25.682 INFO 26808 --- [0.0-9090-exec-5] c.g.unidbg.linux.ARM32SyscallHandler : openat dirfd=-100, pathname=/proc/self/exe, oflags=0x20000, mode=0 2021-01-26 00:04:25.744 INFO 26808 --- [0.0-9090-exec-5] c.g.unidbg.linux.ARM32SyscallHandler : openat dirfd=-100, pathname=/proc/26808/status, oflags=0x20000, mode=0 2021-01-26 00:04:25.751 INFO 26808 --- [0.0-9090-exec-5] c.g.unidbg.linux.ARM32SyscallHandler : stat64 pathname=/data/data/org.autojs.autojs, LR=RX@0x4003c41b[libcms.so]0x3c41b 2021-01-26 00:04:25.752 INFO 26808 --- [0.0-9090-exec-5] c.g.unidbg.linux.ARM32SyscallHandler : stat64 pathname=/data/data/yk.juejin, LR=RX@0x4003c46d[libcms.so]0x3c46d 2021-01-26 00:04:25.753 INFO 26808 --- [0.0-9090-exec-5] c.g.unidbg.linux.ARM32SyscallHandler : stat64 pathname=/data/data/com.cyjh.mobileanjian, LR=RX@0x4003c4c3[libcms.so]0x3c4c3 2021-01-26 00:04:25.753 INFO 26808 --- [0.0-9090-exec-5] c.g.unidbg.linux.ARM32SyscallHandler : stat64 pathname=/data/data/com.cyjh.mobileanjianen, LR=RX@0x4003c513[libcms.so]0x3c513 2021-01-26 00:04:25.754 INFO 26808 --- [0.0-9090-exec-5] c.g.unidbg.linux.ARM32SyscallHandler : stat64 pathname=/data/data/com.touchsprite.android, LR=RX@0x4003c563[libcms.so]0x3c563 2021-01-26 00:04:25.756 INFO 26808 --- [0.0-9090-exec-5] c.g.unidbg.linux.ARM32SyscallHandler : stat64 pathname=/data/data/com.touchspriteent.android, LR=RX@0x4003c5b1[libcms.so]0x3c5b1 2021-01-26 00:04:25.757 INFO 26808 --- [0.0-9090-exec-5] c.g.unidbg.linux.ARM32SyscallHandler : stat64 pathname=/data/data/net.aisence.Touchelper, LR=RX@0x4003c601[libcms.so]0x3c601 2021-01-26 00:04:25.758 INFO 26808 --- [0.0-9090-exec-5] c.g.unidbg.linux.ARM32SyscallHandler : stat64 pathname=/data/data/com.touch.fairy, LR=RX@0x4003c64f[libcms.so]0x3c64f 2021-01-26 00:04:25.759 INFO 26808 --- [0.0-9090-exec-5] c.g.unidbg.linux.ARM32SyscallHandler : stat64 pathname=/data/data/com.zdanjian.zdanjian, LR=RX@0x4003c69f[libcms.so]0x3c69f 2021-01-26 00:04:25.759 INFO 26808 --- [0.0-9090-exec-5] c.g.unidbg.linux.ARM32SyscallHandler : stat64 pathname=/data/data/simplehat.clicker, LR=RX@0x4003c6ed[libcms.so]0x3c6ed 2021-01-26 00:04:25.761 INFO 26808 --- [0.0-9090-exec-5] c.g.unidbg.linux.ARM32SyscallHandler : stat64 pathname=/dev/input/event0, LR=RX@0x4003cbd3[libcms.so]0x3cbd

zhkl0228 commented 3 years ago

看着warn那条影响的

Jacobi2017 commented 3 years ago

2021-01-26 11:09:33.063 WARN 19697 --- [0.0-9090-exec-6] com.github.unidbg.AbstractEmulator : emulate RX@0x40057fa5[libcms.so]0x57fa5 exception sp=unidbg@0xbffff040, msg=java/lang/Thread->currentThread()Ljava/lang/Thread;, offset=26ms Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x000000059b300000, 424673280, 0) failed; error='Cannot allocate memory' (errno=12) #

There is insufficient memory for the Java Runtime Environment to continue.

Native memory allocation (mmap) failed to map 424673280 bytes for committing reserved memory.

An error report file with more information is saved as:

这玩意总是内存不足,大家有遇到这种情况吗?跑了个springboot 总是内存不足

zhkl0228 commented 3 years ago

有没有memory.allocate...分配的内存进行释放

Jacobi2017 commented 3 years ago

有没有memory.allocate...分配的内存进行释放

这个内存释放在哪加呢?

zhkl0228 commented 3 years ago

要看你怎么使用的

Jacobi2017 commented 3 years ago
private douyinxg() {
    emulator=createARMEmulator();
    final Memory memory=emulator.getMemory();

    memory.setLibraryResolver(createLibraryResolver());

    vm=emulator.createDalvikVM(null);
   vm.setJni(this);
    vm.setVerbose(true);

    // 自行修改文件路径
    DalvikModule dm=vm.loadLibrary(new File("unidbg-android/src/test/resources/example_binaries/libcms.so"), false);
    dm.callJNI_OnLoad(emulator);
    module=dm.getModule();

    Native=vm.resolveClass("com/ss/sys/ces/a");
}

基本就这样用的,我看了你的memory 这里的代码

public interface Memory extends IO, Loader, StackMemory {

long HEAP_BASE = 0x8048000;
long STACK_BASE = 0xc0000000L;
int STACK_SIZE_OF_PAGE = 256; // 1024k

long MMAP_BASE = 0x40000000L;

UnidbgPointer allocateStack(int size);
UnidbgPointer pointer(long address);
void setStackPoint(long sp);
long getStackPoint();
long getStackBase();
int getStackSize();

long mmap2(long start, int length, int prot, int flags, int fd, int offset);
int mprotect(long address, int length, int prot);
int brk(long address);

MemoryBlock malloc(int length);
MemoryBlock malloc(int length, boolean runtime);
UnidbgPointer mmap(int length, int prot);
int munmap(long start, int length);

/**
 * set errno
 */
void setErrno(int errno);

File dumpHeap() throws IOException;
File dumpStack() throws IOException;

Collection<MemoryMap> getMemoryMap();

} 是这里的dumpHeap 和dumpstack 进行释放?``