当前位置: 技术问答>linux和unix
相同的程序,每次运行时,栈都是从同一个地址开始的吗?
来源: 互联网 发布时间:2016-01-06
本文导语: 估计我没有说清楚.. 是这样的 有下面一个程序 //sp.c unsigned long find_sp(void){ __asm__("movl %esp, %eax"); } int main(int argc,char* argv[]){ char* buff; int len; long sp; len=atoi(argv[1]); buff=malloc(len); sp=find_sp(); printf("sp is 0x%xn...
估计我没有说清楚..
是这样的 有下面一个程序
//sp.c
unsigned long find_sp(void){
__asm__("movl %esp, %eax");
}
int main(int argc,char* argv[]){
char* buff;
int len;
long sp;
len=atoi(argv[1]);
buff=malloc(len);
sp=find_sp();
printf("sp is 0x%xn",sp);
free(buff);
exit(0);
}
然后我每次运行 ,输入相同的参数 然而输出的结果每次都不同
比如
./sp 300
请问是怎么回事呢
是这样的 有下面一个程序
//sp.c
unsigned long find_sp(void){
__asm__("movl %esp, %eax");
}
int main(int argc,char* argv[]){
char* buff;
int len;
long sp;
len=atoi(argv[1]);
buff=malloc(len);
sp=find_sp();
printf("sp is 0x%xn",sp);
free(buff);
exit(0);
}
然后我每次运行 ,输入相同的参数 然而输出的结果每次都不同
比如
./sp 300
请问是怎么回事呢
|
堆栈是程序加载的时候由操作系统初始化的,每次应该不同。
|
对OSd: stack应该每次都不一样的内存地址,不过对于每个进程空间来说,它的起初位置是一样的,从0x0开始
|
挺奇怪
感觉应该是相同的
感觉应该是相同的
|
哥们对不起了。我还没有对这方面下功夫
|
知道这个有意义吗?向你学习中。。。
|
mark……