每个程序的堆栈在内存中从哪里开始?
我知道有随机地址空间选项,它将随机选择一个地址.如果禁用该选项,每个程序是否从同一地址开始?
如果我们打开两个终端并同时运行两个程序怎么办?系统是否会对两个程序的堆栈使用相同的起始地址(通过覆盖先前程序的堆栈并在上下文切换期间将当前程序的堆栈加载到同一位置)?
如果我通过调用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);
}
Run Code Online (Sandbox Code Playgroud)