2017-06-13 120 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不做出關於那裏的東西都是在內存中,除非您()任何保證:

  • 分配管理內存和針它
  • 分配非託管內存

和你」我們將注意到,在這兩種情況下,它都不是固定的之間的運行 - 它只在運行期間固定

基本上:找到進程之間進行通信的不同方式。原始內存偏移量查找:在這裏不起作用。

相關問題