2017-06-13 121 views
1

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

Memory on the locations

在这两个尝试地址改变两次,并得到再stady。地址的前两个字节在两个地址上都改变了,但是下一个字节在应用程序的每个开始处都是不同的。

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

这里有很多的可能性,但简单的事情,时间和[ASLR](https://en.wikipedia.org/wiki/Address_space_layout_randomization)可能在这里工作。另一方面,没有人保证跨多次运行的内存分配将最终使用相同的地址,因此,为什么会发生这种情况并不重要。它确实,处理它。 –

+1

你想要什么是IPC:https://stackoverflow.com/questions/528652/what-is-the-simplest-method-of-inter-process-communication-between-2-c-sharp-pro – Adrian

+0

看到你的代码可能有助于做出任何明智的答复,但马克的答案可能是正确的。 – PaulF

回答

10

“因为它被允许”; .NET不做出关于那里的东西都是在内存中,除非您()任何保证:

  • 分配管理内存和针它
  • 分配非托管内存

和你”我们将注意到,在这两种情况下,它都不是固定的之间的运行 - 它只在运行期间固定

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

相关问题