标签归档:ChakraCore

ChakraCore Var数据类型指针疑惑

我最近看ChakraCore的源码做CVE分析的时候,一直不知道为什么Object Array能存储所有类型的对象。对于Native Value,它在高16位打Tag直接存进void * ,对于Object Pointer,它在void * 存入原封不动的指针。判断的时候,用SHR右移48位,看剩下的高位是否为0,若不为0,就是Tagged Native Value,否则就是Object Pointer。

今天分析CVE的时候突然想明白了48位是怎么定出来的了。因为x86_64现在的Virtual Address Size是48位。而且还有一个原因是,x86用户态的Canonical VM Address高16位是0000h开头。换个架构,这玩意貌似就不适用了。也没准随着Arch发展一下,VA Size增大一些,ChakraCore就彻底倒闭了。

注:微软不支持,应该已经倒闭了。

用Visual Studio 2022编译ChakraCore遇到的Bug解决方法

由于读论文,复现CVE-2018-0840的需要。从Github官网上下载ChakraCore旧版代码[1]。代码很老了,在新版Visual Studio 2022中编译出现大量问题,特此记录如下解决方案。

  1. 首先根据Visual Studio提示将所用的解决方案及项目全部升级。
  2. 编译器报错说typeinfo.h找不到时,把对应地方的typeinfo.h全部改成typeinfo
  3. 参照[2]的说明向Build/Common.Build.Default.props中加入对应的编译器版本。

如果不加入,他会一直提示MSBuild 错误 MSB8020,但告诉你的是v143 生成工具未安装。这件事让人很迷惑,我早已经安装完了。按照3的步骤做完就不会提示了。

引用:

[1] https://github.com/chakra-core/ChakraCore/tree/e8738ca441f77b5271fedf8574858eeb8b8b7114
[2] https://github.com/chakra-core/ChakraCore/pull/6759