Pointers asm.js-获取指针的值

Pointers asm.js-获取指针的值,pointers,integer,emscripten,asm.js,Pointers,Integer,Emscripten,Asm.js,js处理很多数学问题,为了简单起见,它使用int作为指针 我试图调试一些代码,但看不到实际值,只有asm.js中的“指针” 有什么方法可以直接找到该值吗?它使用ints的原因不是为了简单,而是为了安全:代码不应该在ArrayBuffer之外建立索引:您看到的堆有一个额外的间接寻址,与usespace看不到物理地址,而只看到虚拟地址的方式完全相同(除了asm.js不会分割底层存储) 你想干什么 如果您试图从调试器中获取该值,那么可能会发生一些事情(通过在ArrayBuffer的构造中使用断点来计算

js处理很多数学问题,为了简单起见,它使用int作为指针

我试图调试一些代码,但看不到实际值,只有asm.js中的“指针”


有什么方法可以直接找到该值吗?

它使用ints的原因不是为了简单,而是为了安全:代码不应该在ArrayBuffer之外建立索引:您看到的堆有一个额外的间接寻址,与usespace看不到物理地址,而只看到虚拟地址的方式完全相同(除了asm.js不会分割底层存储)

你想干什么

如果您试图从调试器中获取该值,那么可能会发生一些事情(通过在ArrayBuffer的构造中使用断点来计算其基址,添加索引)


如果您想将C++代码的值编译为ASM.JS,那么这将不起作用,因为它会危及安全性。

< P>如果您可以访问“代码>模块<代码>对象,请参阅DEV工具,如果您有指针值,并且知道它指向的变量类型,那么您可以使用。例如,在备忘录中检索32位整数。在您的位置
2434
,您可以调用:

Module.getValue(2434, 'i32');

您可以使用
i8
i16
i32
i64
float
double
作为内存位置的数据类型。我不知道是否还有其他类型可以传递。

getValue方法工作,但返回另一个内存地址。正如JF所说,如果如果getValue返回一个内存地址,您可以将该地址再次传递到getValue中,以获取该位置的值。您可以对安全性进行一点扩展吗?您可以给出一个具体的例子,说明一种替代方法可以防止的情况吗?我实际上没有将安全性视为数组的理由缓冲区,事实上,asm.js规范at似乎没有提到安全性,但提到了效率和优化。安全性是由JavaScript虚拟机的模型暗示的,asm.js必须遵循该模型,因为它只是JavaScript的一个子集。虚拟机希望控制其整个地址空间,以便能够对GC对象以及安全性。安全方面主要基于不允许开发人员存储到进程地址空间的其他部分,例如VM本身,这很容易被利用。对于ArrayBuffers来说,这有点微妙,因为VM可以使用边界检查。在这种情况下,更像是信息/ASLR泄漏。