我做了一个简单的C程序,它只打印main()执行时的地址:
printf("%08X\n", &main);
我使用Visual C++ 2015使用参数编译它/DYNAMICBASE,对于x86(编译x64时也会发生同样的事情).
前两次我运行它,返回的地址是不同的,正如预期的那样.但是,两次之后,程序返回的地址保持不变:
00C31050
00221050
00221050
00221050
Run Code Online (Sandbox Code Playgroud)
重新编译或重命名可执行文件会再次使地址随机化.
这里发生了什么?Windows以某种方式缓存可执行文件吗?