【越狱开发】在越狱设备下开启iOS Webkit的JIT功能

来源:互联网 发布:淘宝如何批量设置运费 编辑:程序博客网 时间:2024/04/28 15:04

其实很久之前就有越狱工作者研究过iOS的MobileSafari是如何进行 JIT 处理。

原始PDF地址为:http://reverse.put.as/wp-content/uploads/2011/06/syscan11_breaking_ios_code_signing.pdf


其简单原理如下:

JIT的本质是在运行时动态生成Native Code并执行。

这个操作恰恰是App Store所禁止的,因为App Store必须审核第三方程序上传的Native Code,所以iOS系统会通过权限管理对应用程序进行限制。

所做的限制可以简单理解为 “动态生成的NativeCode只能在 某个内存分页上执行”。详情见上面的PDF。


如何在越狱设备上开启第三方应用程序的JIT:

众所周知,MobileSafari是开启了JIT的。我们可以通过 ldid 工具查看其 Code Sign,发现有如下字段:

<key>dynamic-codesigning</key><true/>
该字段就是为了告诉系统,该程序有动态代码的需求。


如果我们想将iOS的Chrome开启JIT,那么我们只需参考 http://blog.csdn.net/lucky_06/article/details/8925804 的方法,添加上述entitlement 字段即可。

对于自己build的程序,只要在code sign entitlements 的时候添加上述字段就可以开启。


效率对比:

通过SunSpider测试, http://www.webkit.org/perf/sunspider/sunspider.html

在iPad2上的结果如下:(代表每项平均完成时间,越小越好)

开启JIT : 7213ms

开启JIT    : 1803ms


总体效率差距有3倍之多,Apple真是暴君。




原创粉丝点击