虚拟地址如何分配?
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 布局随机化告诉的那样——是随机的。
以此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 布局随机化告诉的那样——是随机的。