关键字:ASLR
1. 两个平台必然都用虚地址,不要看到低地址就以为一定是物理地址。
2. 两边结果不一样,因为你win平台编译出来的应该是32位的,地址必然小于4G,而Ubuntu那边gcc可能是64位的,所以才输出一个很大的地址,你换32位Ubuntu(不知道还能不能找到),肯定输出就不一样了。
3. 没有规范约定不同操作系统在分配栈上数据的时候一定要放在某个位置,实际上放哪都行,如果操作系统允许,放NULL上也没事。
----------------------------
原来题主问的是为什么Ubuntu两次栈上数据不同,看这里:
ASLR/DEP绕过技术概览(学习)Win7下打开DEP: