当前位置: 代码迷 >> 汇编语言 >> 相同的程序,每次运行时,栈都是从同一个地址开始的吗?该如何解决
  详细解决方案

相同的程序,每次运行时,栈都是从同一个地址开始的吗?该如何解决

热度:10187   发布时间:2013-02-26 00:00:00.0
相同的程序,每次运行时,栈都是从同一个地址开始的吗?
估计我没有说清楚..
是这样的     有下面一个程序
//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%x\n ",sp);
free(buff);
exit(0);

}

然后我每次运行   ,输入相同的参数   然而输出的结果每次都不同

比如  
./sp   300

请问是怎么回事呢

------解决方案--------------------------------------------------------
是这样的,输入的时间是分配的空间而已,而这个空间是用来存储堆栈指针的,因为堆栈指针是在系统运行时分配的,所以是不定的
------解决方案--------------------------------------------------------
你的程序在pc中运行的话,应该是用的系统的堆栈,或者系统临时分配的地址。有好多程序
都随时地申请释放空间,所以sp的地址一直在变化,我是这么想的。呵呵
  相关解决方案