v8如何对内存中的指针进行编码



V8版本10.7.0(候选(

我已经从几个对象创建了一个元素数组

在此处输入图像描述

对于v8内置函数,使用"%DebugPrint"获取指向数组对象的指针

在此处输入图像描述

我在存储器中查找数组对象"的地址;0x000001BE0010BC5D";,

在此处输入图像描述

我看到第一个地址对应于对象的映射地图地址是加密的

我很想知道如何手动解码地址

它不是加密的,而是压缩的。因此,它有助于在反汇编程序中打印32位值;在这种情况下,这将是数组映射的0x002c3b51(打印的64位值的下半部分(。由于所有对象都位于同一堆中,因此可以手动解压缩该地址,方法是添加与数组地址相同的高32位前缀,即0x000001be。因此,地图的完整地址是0x000001be002c3b51(正如您在第二张屏幕截图中已经看到的那样(。

第一个64位值的上半部分是数组的第二个字段的压缩版本;属性";后备存储器。

附带说明:请学习如何将代码作为代码发布,而不是作为屏幕截图。

最新更新