http://hi.baidu.com/tombkeeper - 选录

JIT Spray技术

2010-02-04链接

白天说的 那个 Paper在这里: http://www.semantiscope.com/research/BHDC2010/BHDC-2010-Paper.pdf 。利用JIT在内存中制造可控可执行代码这个思路的确很有创造性。其意义不亚于Heap Spray,甚至可以和当年的JMP ESP相比较。 整个Paper的核心其实是“DEVELOPMENT”这部分。前面大量的篇幅主要在讲如何用一个非常淫荡的方法获取实际内存地址。不过那种获取地址的方式虽然极其巧妙,但是比较耗时,完成一次操作需要至少数分钟的时间,比较学院派。实际完全可以用稍微粗糙但更有效率更实用的技术来取代这种精确定位的方法。 新技术在带来新正面特性的同时必然引入新负面特性。这是源自辩证法的一个普适的规律。无论你信不信,这个规律都是存在的。JIT相对来说就是一个新技术,就是 狐狸精 。这狐狸精能极大提高脚本引擎的效率,所以Flash现在用了,Chrome用了,Firefox据说也用了,好像连未来的IE9也要用。这种确实有效的技术,只要一家用了,别家必然也要跟着用。丽春院新来了狐狸精,醉红楼肯定也要引进,要不然客人都跑了。 虽然理论上也有一些办法对抗这种技术(譬如在JIT编译中不使用任何立即数,更加随机地分配地址,随机调整JIT编译优化选项,等等),不过恐怕很难彻底根除。x86的指令太复杂了,总能有办法的。而且对抗必然意味着执行效率下降,这就违背了JIT技术的初衷。 JIT这个思路打开的不只一扇门。如前面所说,除Flash外,各浏览器的脚本引擎也都用了或将要用JIT,所以可能也都会有空子可钻。退一步说,即使所有脚本引擎开发者都铁了心要不惜一切代价解决这个问题,现在也至少还有两种其它的办法。这个宇宙的熵毕竟恒增,未来是混乱而非秩序的。 顺便说一句,任何高明完美的流程制度规范方法体系理论架构,都是由不完美的人设计,还要由部分不高明不完美的人来执行。如果理论完美就可以解决问题,那么《侠客行》中金乌派任何一个人都能打得过雪山派任何一个人。因为金乌派的武功完全是一招一式对照着雪山派的功夫设计出来的克制之术。 如果仅从理论上说,那么《笑傲江湖》中泰山派那招“ 岱宗如何 ”就是世上第一厉害的剑法——那可是微积分武学。