我几年没有编程了,但是关于Meltdown和Spectre的大惊小怪我已经安装了VS2017并从这个pdf编译了Spectre示例:https://spectreattack.com/spectre.pdf
但是我不知道Spectre示例在命令行上使用的地址是如何工作的?
我修改了代码以输出秘密字符串的指针地址,并在Native Tools Shell中使用cl编译,它输出如下内容:
00007FF6CF2210F0
在示例的命令行输入此地址,它会正确输出密码字符串。
但是,如果我使用类似的字符串创建一个简单的程序并输出该地址 然后将它提供给幽灵示例,在另一个shell中,我没有得到正确的字符串。
我一直在阅读有关虚拟与实际地址,网页和偏移量的信息,但我很遗憾。
所以问题是:
你如何用C代码计算指针的物理地址?
答案 0 :(得分:1)
你如何用C代码计算指针的物理地址?
我带你去询问用指针值计算物理地址表示,而不是指针值存储的物理地址。无论如何,后者只归结为前者。
但就C语言本身而言,你不这样做。 C首先没有认识到物理和虚拟内存之间的区别,也没有任何需要这样做。这种区别是硬件支持的操作系统级别问题。因此,任何完成您描述的内容的技术都依赖于C实现和执行环境的细节。
Spectre设法打破虚拟内存提供的(部分)进程隔离可能是最令人恐惧的事情。