虚拟地址如何分配?

how virtual addresses assigned?

以此C代码为例

#include <stdio.h>
#include <stdlib.h>

int main() {

    int x;
    int* y = (int *) malloc(10*sizeof(int));

    printf("%p\n",&x);
    printf("%p\n",y);
    printf("%p\n",&(y[1]));

    while(1);

    return 0;
}

这将打印看起来像这样的虚拟地址

0x7ffd4e96d214

0x908010

0x908014

每次 运行 二进制文件时,虚拟地址都会不同,这让我想到虚拟地址实际上是如何为程序确定的?

这可能是 ASLR 的效果。

决定应该——正如名称地址 Space 布局随机化告诉的那样——是随机的。