虚拟/物理地址如何与Spectre示例相关?

时间:2018-01-10 14:08:26

标签: c pointers virtual-address-space

我几年没有编程了,但是关于Meltdown和Spectre的大惊小怪我已经安装了VS2017并从这个pdf编译了Spectre示例:https://spectreattack.com/spectre.pdf

但是我不知道Spectre示例在命令行上使用的地址是如何工作的?

我修改了代码以输出秘密字符串的指针地址,并在Native Tools Shell中使用cl编译,它输出如下内容:

00007FF6CF2210F0

在示例的命令行输入此地址,它会正确输出密码字符串。

但是,如果我使用类似的字符串创建一个简单的程序并输出该地址 然后将它提供给幽灵示例,在另一个shell中,我没有得到正确的字符串。

我一直在阅读有关虚拟与实际地址,网页和偏移量的信息,但我很遗憾。

所以问题是:

你如何用C代码计算指针的物理地址?

1 个答案:

答案 0 :(得分:1)

  

你如何用C代码计算指针的物理地址?

我带你去询问用指针值计算物理地址表示,而不是指针值存储的物理地址。无论如何,后者只归结为前者。

但就C语言本身而言,你这样做。 C首先没有认识到物理和虚拟内存之间的区别,也没有任何需要这样做。这种区别是硬件支持的操作系统级别问题。因此,任何完成您描述的内容的技术都依赖于C实现和执行环境的细节。

Spectre设法打破虚拟内存提供的(部分)进程隔离可能是最令人恐惧的事情。