C编译器中的地址空间布局随机化

pau*_*ulj 6 c memory-management aslr

如果我没有弄错的话,ASLR会在每次运行程序时使C编译器中的局部变量具有不同的地址.但是当我在Turbo C++和Dev-CPP IDE中尝试它时,它只返回一个类似的局部变量地址.我试过的代码:

#include <stdio.h>
#include <conio.h>

int main()
{
 int x = 10;
 int *ptr = &x;
 printf("%d", ptr);
 getch();
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

在此之前,我认为局部变量的地址是相同的,因为它分配在相同的堆栈区域中,因此分配了相同的内存地址.但是当我在stackoverflow中找到一个关于ASLR的线程时,它让我做了这些.我想这是因为编译器.任何人都可以对此有所了解吗?

编辑:

我正在使用Windows 7.

Moh*_*ain 4

看来您正在使用 Windows。

引用自维基百科

Microsoft 的 Windows Vista(2007 年 1 月发布)及更高版本仅对那些专门链接为启用 ASLR 的可执行文件和动态链接库启用了 ASLR。为了兼容性,默认情况下不为其他应用程序启用它。通常,只有较旧的软件不兼容,并且可以通过编辑注册表项“HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\MoveImages”来完全启用 ASLR。

基于主机的入侵防御系统(例如 WehnTrust 和 Ozone)还为 Windows XP 和 Windows Server 2003 操作系统提供 ASLR。WehnTrust 是开源的 Ozone 实施的完整细节不可用

确保启用 ASLR 来观察预期的行为。