gpt4 book ai didi

c - 如果我从两台不同的计算机在 VM 中运行程序,内存地址是否相同?

转载 作者:行者123 更新时间:2023-12-04 12:01:53 25 4
gpt4 key购买 nike

我对 C 还很陌生,我了解到地址取决于操作系统和 CPU 等一些因素。我有一个 C 类(class)的实验室,它询问我们是否运行一个程序并打印出每个变量的地址,它们是否与另一个学生(完全相同的程序)具有相同的地址和值。它们是局部变量,存储在堆栈中。通常我会说不,但我们所有人都需要通过 ssh 连接到我们大学的实验室,并且我们的程序正在具有相同规范的相同机器上运行。这是我感到困惑的地方,很确定这些值是相同的,但是,我不知道究竟是什么决定了这些地址。这是程序中的一段代码:

int g2(int a, int b)
{
int c = g1(a + 3, b - 11);
printf("g2: %d %d %d \n", a,b,c);
printf("a's address is %p b's address is %p C's address is %p\n", &a, &b, &c);
return c - b;
}

对我来说,a 的地址是 0x7ffe9bce4a0c。也不仅仅是寻找家庭作业的答案,在这里问是因为我的队友都没有把他们的地址发给我,而我们被允许这样做。已经研究过但找不到符合这种情况的答案,非常感谢任何帮助,谢谢!

最佳答案

"Will memory addresses be the same if I run a program in a VM from two different computers?"

不,当仅在同一环境和同一台机器上运行时,它们甚至可能不会相同。没有什么比保证它具有相同的地址更好的了。

现代操作系统任意分配内存(当然是在某些部分)。

这是有充分理由的:为了防止黑客利用内存漏洞来损害程序甚至操作系统。

此技术称为 Address Space Layout Randomization .您可以阅读更多相关信息 here .


变量可能在多次执行中具有相同的地址,但不能保证这种情况会再次发生,在下一次运行时已经发生。事实上,如果操作系统支持 ASLR,更有可能“几乎可以保证”地址不相等。

虚拟机对该行为没有影响。也许您应该阅读有关特定虚拟机内存存储的文档(如果它支持 ASLR),但它应遵循相同的准则。

关于c - 如果我从两台不同的计算机在 VM 中运行程序,内存地址是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61752426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com