Closed 20000s closed 2 years ago
按道理 只要参数的类不同 应该不会导致命名冲突啊
标准的jni函数命名,只包含类名,方法名及参数, 但是一些混淆过的class这三个都可能一样, 就返回值不同. 标准的jni函数名就会冲突, 所以在生成jni函数时把返回值也加进去,然后就只能注册那些函数. 这问题最早是用es文件管理器测试出来的,你可以看看示例里那个,应该有这个问题
谢谢作者 去看了下es管理器 确实发现了这个问题,不过这就导致我十分好奇这app编译是怎么通过的,按道理java的重载不允许这个存在
java语法层面是不允许,但是vm层面可以。而且jvm规范也是以方法名和方法签名(参数加上返回值, 比如(II)V)来区分方法的,所以操作字节码就不会受限制(混淆器就是直接处理字节码的)。 自己实验的话可以试试用asm/jasmin、dexlib2/smali生成包含这种命名的.class、.dex
我仔细去看了下 之所以es不行,因为里面的混淆将类名的一些字段改成了不可见字符,估计触发了jadx的bug,将它归并到一个类了,而且我自己apktool重打包 修改了一下smali一下(复制了一个函数的smali,修改它的返回值),结果成功了 感谢作者
最近在看项目源码,学习dex vmp原理,有点不理解作者的注释,是什么情况混淆会导致按标准的jni函数名可能会有命名冲突问题