我已经有几年没有编程了,但是由于对 Meltdown 和 Spectre 的大惊小怪,我安装了 VS2017 并从这个 pdf 编译了 Spectre 示例:https://spectreattack.com/spectre.pdf
但是我不知道 Spectre 示例在命令行上采用的地址是如何工作的?
我修改了代码以输出 secret 字符串的指针地址,并在 Native Tools Shell 中使用 cl 进行编译,它输出如下内容:
00007FF6CF2210F0
在示例的命令行中输入此地址,它会正确输出 secret 字符串。
但是如果我用类似的字符串编写一个简单的程序并输出那个地址 然后将它提供给 Spectre 示例,在另一个 shell 中,我没有得到正确的字符串。
我一直在阅读有关虚拟地址与物理地址以及页面和偏移量的信息,但我完全迷失了。
那么问题是:
在 C 代码中,您将如何计算指针的物理地址?
最佳答案
How would you in C code calculate the physical address of a pointer?
我想你是在问如何计算指针值表示的物理地址,而不是存储指针值的物理地址。无论如何,后者只是归结为前者。
但就 C 语言本身而言,您不要这样做。 C 从一开始就不承认物理内存和虚拟内存之间的区别,也没有必要这样做。这种区别是操作系统级别对硬件支持的关注。因此,任何能够完成您所描述内容的技术都依赖于 C 实现和执行环境的细节。
Spectre 设法打破(部分)由虚拟内存提供的进程隔离可能是它最可怕的地方。
关于c - 关于 Spectre 示例,虚拟/物理地址如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48189240/