其实本身环境是反编译注入代码 当前的上下文环境中 有一个 innerclass 可以 find 然后 new 出来 innerclass 本身扩展重写了 baseclass 里面的某个回调函数 onrespones innerclass 生成的对象可以通过 invoke 的方式去执行 execute 函数触发 onrespones
问题:如何 1)正向的方式去 new 出一个对象 2 )重写这个对象的 onrespones 方法 3)执行 execute 函数 4)触发自己重写的 onrespones 函数
问题扩展 1:当前环境下只有一个 object 如何通过反射或者代理或者其他方式 来重写这个 object 的某个方法
问题扩展 2:使用动态代理 new 出一个新的 object 在动态代理类中过滤 invoke 方法进行处理可以实现当前问题 但是仅限于源码级别编译环境 (innerclass)Proxy.newProxyInstance(classloader, Class, new InvocationHandler() {.....}); 上句代码中使用类型强转应该是在编译期间就固定了返回对象的类,从而使返回的对象可以执行 innerclass 中 exexcute 函数 而在注入环境中,无法使用强制转换,使用 cast 函数也一样无效 应该怎么去使用动态代理 new 出 innerclass 的对象进行调用?
问题补充:只是修改当前自己 new 出的 object 的方法 所以动态代理本身就是做这个事情的但是当前环境已经问题 2 讲出来了 并不需要也不想直接修改 innerclass 的方法 不然可以直接使用 hook 框架替换掉 这样子的话就影响到了原程序中所有使用这个 innerclass 的对象
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.