每个程序的堆栈从哪里开始?
我知道有一个随机地址空间选项,可以随机选择地址。如果禁用该选项,每个程序是否都从相同的地址开始?
如果我们打开两个终端并同时运行两个程序,系统会使用相同的起始地址来存储这两个程序的堆栈吗(在上下文切换期间将前一个程序的堆栈覆盖并加载当前程序的堆栈到同一位置)?
如果我通过调用
我知道有一个随机地址空间选项,可以随机选择地址。如果禁用该选项,每个程序是否都从相同的地址开始?
如果我们打开两个终端并同时运行两个程序,系统会使用相同的起始地址来存储这两个程序的堆栈吗(在上下文切换期间将前一个程序的堆栈覆盖并加载当前程序的堆栈到同一位置)?
如果我通过调用
exec()
-family函数来运行程序,例如以下示例,该程序和“易受攻击”的程序是否有不同的堆栈?还是易受攻击的程序只是在调用程序的堆栈顶部有一个不同的堆栈帧?int main(int argc, char *argv[]) {
char *buff, *ptr;
int i;
bsize = atoi(argv[1]);
if (!(buff = malloc(bsize))) {
printf("Can't allocate memory.\n");
exit(0);
}
for (i = 0; i < bsize; i+=4)
buff[i] = '0';
execl("/home/amulya/Desktop/CMPE209/HWs/HW2/vulnerable","vulnerable", buff, NULL);
return(-1);
}