【发布时间】:2021-07-24 07:21:30
【问题描述】:
我正在寻找的是每次启动程序时能够获得所有相同的地址或起始地址。例如
地址1 = 0x7ffde3397580
地址2 = 0x7ffde3397584
然后当我重新启动程序时,它将是相同的地址。我写了一个小程序,每次运行它都会从一个新地址开始,例如
地址1 =0x7ffd8f366500
和上面的不一样。 另外,如果您能给我指出一本关于用 c 语言进行内存地址操作的好书或课程,那就太好了。我发现的大部分内容都与分配有关。换句话说,每次我运行程序时,我都想清除并分配完全相同的内存,而不仅仅是内存量。
我用结构、整数、数组和字符编写了几个程序。他们都做同样的事情。如果使用循环,它们将一遍又一遍地显示相同的地址,因为在分配之后它们不应该改变。
我很抱歉这看起来很糟糕,这个编辑器很糟糕,我会花点时间弄清楚。
【问题讨论】:
-
如果你的程序在不同的内存位置启动,那么你的操作系统已经完成了它的工作。
-
那么我需要在内核中处理这个问题,是吗?
-
是的,主要在loader模块中
-
显而易见的问题 - 你为什么想要/需要这样做?这可能是XY problem?
-
您所看到的称为Address space layout randomization 或ASLR。根据您的操作系统和/或编译器,您可能可以选择退出或禁用它。