2024-3-28

今日流水账:

  • 把计网实验报告完成了,当然还有点小问题就是PC2=>PC4的测试截图没有
  • 看了下V8中是如何实现快速 for in的,嗯,懵懵懂懂吧,就了解了个 enum cache,其是描述符数组的一个字段,所以其是针对命名属性的,就是把可迭代的命名属性的键和索引存了下来
  • 然后看了会垃圾回收机制,有了个大概的了解,但是对应 scavenge 是如何不重复不遗漏的复制对象没有搞得太清楚。然后写屏障还是懵懵懂懂
  • 强网杯那道V8的题目漏洞原理看懂了,但是触发漏洞的代码细节没有看懂。然后下午玩了一个小时的手机…悲,然后找了会V8 IR相关的资料,但是没找到,所以又看了会GC,终于明白了Scavenge算法是如何不重复不遗漏的复制对象,主要就是设置了一个forwarding指针去记录对象在复制到to-space中的位置从而避免了重复复制的问题。对于写屏障也基本搞懂了其作用
  • 吃完晚饭一直在搞强网杯那题,不会啊…菜死了,现在晚上9点,回宿舍洗个澡,今天晚上一定把这题解决了,艹 ====> 哎,把源码大致看了下,对漏洞的理解已经差不多了,其实跟JIT相关性不是很大,我还一直找JIT相关资料呢,悲。然后把POC写出来了(应该是理解了作者的POC,自己这么菜,怎么可能自己写POC),然后利用就明天写吧
    • 其实理解这个漏洞关键要理解 V8 中for-in 的实现,对于 for-in 的实现并没有一个非常准确的规范,但是逻辑其实都差不多,只是遍历顺序不同。在V8中,当使用 for-in 语句时,会先收集键信息(包括原型链上的键),然后建立 enum cache。然后在下次访问时,就会直接以 enum cache 为源进行访问,从而提升 for-in 的性能。
    • enum cache 是共享的(在map转换树上的对象共享),当对象的 map 方式改变时(比如修改属性的类型),并没有检测原来的 map 的描述符数组的 enum cache 是否存在,而是直接将 enum cache 进行清空,…嗯好像有点不对,脑子有点懵了,明天在好好整理一下

明日计划:

  • 把强网杯那题搞完
  • 学习 Fuzz(今天Fuzz是一点没看,捂脸)
  • 看看内核相关的东西(有时间的话)

菜狗就i是我

上一篇:window下迁移SVN仓库到新的windows服务器-二、服务端迁移


下一篇:智能合约测试例子