2017-01-19 39 views
-4

我在此鏈接找到該代碼(「How to get the starting/base address of a process in C++?」)。內存地址,以及如何打印其值

當我運行它,它說我(「基地址:400000」)現在我知道內存地址工作惠氏十六進制不是十進制。所以有很多問題,我想問你:

  1. 如何將它轉換成內存地址?
  2. 如何使用該地址&修改該值?
  3. 可以打印進程正在使用的所有內存地址?
  4. 有可能獲得地址指示的值?

感謝

+4

「現在我知道內存地址工作白十六進制不是十進制」 - 這是不正確的,幾乎沒有意義。 – immibis

+1

用於表示數字的基數與該數字的值無關。 0x10 16和二進制10000是相同的值。 –

+0

它已經是一個內存地址,只是符號是'0x400000'。修改這個地址你不能像你寫的那樣保持它的常量:'5 ++'。打印它裏面的值你使用解引用運算符'*':'cout << * ptrToAddr;' – Raindrop7

回答

0

我怎樣才能把它翻譯成一個內存地址?

這個數字已經代表了一個內存地址,不需要翻譯。

我該如何使用該地址&修改該值?

在嵌入式系統領域,我們採取指針並將它們分配給指針。如果我們想要訪問一個16位寄存器或內存地址,我們會爲該值分配一個uint16_t指針。
uint16_t * memory_pointer = (uint16_t *) 0x40000000;

它可以打印所有內存地址的過程中使用?

這是一個操作系統問題。一些操作系統嚴重地阻止一個程序訪問另一個進程的內存區域。當您的進程運行並使用與您的進程相同的內存區域時,「其他進程」可能會交換到磁盤。所以這是否可能取決於您的平臺的操作系統。

有可能獲得由地址指示的值?

取決於操作系統和平臺。某些平臺在特定地址處具有內存,並且訪問該範圍之外的地址導致未定義的行爲

一些操作系統會阻止訪問進程外的內存(如內核內存)。在這種情況下訪問內存的結果取決於操作系統。

訪問內存的方法是取消引用指針。在C++中,對於字節訪問,您可以使用指向uint8_t的指針。

+0

謝謝@Thomas Matthews,它已經清楚而全面。我正在使用Windows 10 ... –