【发布时间】:2011-05-11 11:18:53
【问题描述】:
我写了一个测试,打印argv[0]的内容——main函数的参数地址如下:
printf("%p\n",argv[0]);
我在 Windows 7 上使用 Visual Studio 2008 编译了该程序。
然后我执行程序 1000 次,将结果输出到文件中。结果 argv[0] 的地址发生了变化,但是,有些地址是相同的,并且重复了大约 10 次。
为什么main函数的参数地址每次都变化?
【问题讨论】:
-
为什么每次都一样?为什么你在乎?您的首字母缩写词:ASLR - 地址空间布局随机化。
-
+1 用于 ASLR。所有技术中最酷的一种,可以使糟糕的应用程序变得更糟。 en.wikipedia.org/wiki/Address_space_layout_randomization
-
要便携打印指针,需要转换为
void*:printf("%p\n", (void*)argv);
标签: c parameters main memory-address