【问题标题】:Why do memory address change on runtime为什么内存地址在运行时改变
【发布时间】:2017-06-13 12:27:32
【问题描述】:

我在 C#.Net 中编写了一个应用程序,其中包含一个在运行时更改的简单双变量。我的目标是从另一个程序中读取这个变量。所以我用 ArtMoney 查看了内存以获取内存地址。但是我的变量的地址在运行时会发生变化。谁能告诉我为什么?

在两次尝试中,地址都更改了两次,然后变得稳定。两次尝试更改的地址的前两个字节相同,但下一个字节在应用程序的每次启动时都不同。

  • 为什么地址在运行时会更改两次?
  • 如何确定地址的“偏移量”?

【问题讨论】:

  • 这里有很多可能性,但简单的事情比如时间和ASLR 可能在这里起作用。另一方面,没有人保证跨多次运行的内存分配最终会使用相同的地址,所以为什么会发生这种情况并不重要。确实如此,处理它。
  • 查看您的代码可能有助于做出明智的回应,但 Marc 在下面的回答可能是正确的。
  • 根据我为游戏制作培训师的经验,我知道可能会有一系列指针最终指向一个静态地址

标签: c# .net memory memory-address


【解决方案1】:

"因为它被允许"; .NET 不对内存中的内容做出任何保证,除非您(或者):

  • 分配托管内存并固定它
  • 分配非托管内存

您会注意到,在这两种情况下,它都不是固定的在运行之间 - 它只是在运行期间固定。 p>

基本上:找到一种不同的方式在进程之间进行通信。原始内存偏移查找:在这里不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2012-12-29
    • 1970-01-01
    • 2019-12-23
    相关资源
    最近更新 更多