内存地址,以及如何打印其值

时间:2017-01-19 22:16:26

标签: c++ memory-address

我在此链接中找到了代码(" How to get the starting/base address of a process in C++?")。

当我运行它时,它说我("基地址:400000")现在我知道内存地址工作为十六进制十六进制。所以我想问你很多问题:

  1. 如何将其翻译成内存地址?
  2. 我如何使用该地址&修改值?
  3. 是否可以打印进程正在使用的所有内存地址?
  4. 可以获得地址所指示的价值吗?
  5. 谢谢

1 个答案:

答案 0 :(得分:0)

  

如何将其翻译成内存地址?

该号码已代表内存地址,无需翻译。

  

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

在嵌入式系统领域,我们使用指针并将它们分配给指针。如果我们想要访问16位寄存器或存储器地址,我们会为该值分配一个uint16_t指针 uint16_t * memory_pointer = (uint16_t *) 0x40000000;

  

是否可以打印进程正在使用的所有内存地址?

这是一个操作系统问题。某些操作系统会严重阻止一个程序访问另一个进程的内存区域。 "其他流程"可以在进程运行时交换到磁盘,并使用与进程相同的内存区域。因此,这是否可行取决于您平台的操作系统。

  

可以获得地址指示的值吗?

取决于操作系统和平台。某些平台在特定地址处具有内存,并且访问该范围之外的地址会导致未定义的行为

某些操作系统会防止访问进程外的内存(例如内核的内存)。在这种情况下访问内存的结果取决于操作系统。

访问内存的方法是取消引用指针。在C ++中,对于字节访问,您将使用指向uint8_t的指针。