zhkl0228 / unidbg

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

你好,请问参数怎么传Object[]数组呢? #675

Open liuwang168 opened 1 week ago

liuwang168 commented 1 week ago

native函数的参数是需要传一个Object[]数组 String sgin = sgmiddletier.callJniMethodObject(emulator, "doCommandNative(I[Ljava/lang/Object;)Ljava/lang/Object;", Integer.valueOf(10401),new Object[]{map,"21792629",2,"sgAuthCode",true}).toString();

image image

这个代码里面不支持

zhaodice commented 6 days ago

自己悟

public void n(String s1, Object[] objects) {
        synchronized (emulator) {
            DvmObject<?>[] dvmObjects = new DvmObject[objects.length];
            for(int i = 0; i<objects.length; i++){
                String[] dat = (String[])objects[i];
                if(dat[3].equals("k5")){
                    k5Fun = dat[0]+"->"+dat[1]+dat[2];
                }
                dvmObjects[i] = ArrayObject.newStringArray(vm, dat);
            }
            DvmObject<?> u = newInstance("com/tencent/qimei/uin/U", true);
            u.callJniMethodObject(emulator, "n(Landroid/content/Context;Ljava/lang/String;[Ljava/lang/Object;)V", context, s1, new ArrayObject(dvmObjects));
        }
    }