程序栈空间的内存分布问题
一个很简单的程序
int _tmain(int argc, _TCHAR* argv[])
{
int a=1;
int b=2;
int c=3;
printf("%x %x %x %x %x\n",&argv,&argc,&a,&b,&c);
int *pa=new int;
int *pb=new int;
int *pc=new int;
printf("%x %x %x\n",pa,pb,pc);
return 0;
}
}
某次的输出结果是
int _tmain(int argc, _TCHAR* argv[])
{
int a=1;
int b=2;
int c=3;
printf("%x %x %x %x %x\n",&argv,&argc,&a,&b,&c);
return 0;
}
某次的输出结果是:1cf998 1cf994 1cf984 1cf978 1cf96c
可以看出,栈的地址是从高地址开始的。而参数压栈是从右到左的。
虽然每次的输出结果都不同,但是a,b,c这三个栈上的数据的地址相互间差了0xc。argv和argc的地址相差了了0x4,argc和a的地址相差为0x10(十六进制)。
int类型为占据四个字节。TCHAR占据一个或是两个字节。但这些地址值之间的差距却没有显示这样的结果。却请问是为什么呢? 内存 栈 C
[解决办法]
用调试器看反汇编代码吧
[解决办法]
考虑函数的返回地址,上一桢的ebp,安全cookie。a,b,c也可以不连续,这是编译器的自由。
你只需要知道大致的布局即可。
[解决办法]
release编译后运行
debug会插入一些测试代码