直接从任何ram地址读取?

时间:2014-06-20 09:01:29

标签: c linux

我正在使用Linux操作系统对硬件进行一些调试。

现在没有办法让我知道它是否有效,除非我能检查我要求它写的分配的ram。

是否有某种方法可以从同一操作系统中运行的外部程序检查该块或RAM中的内容?

如果我可以在C中编写一个小程序来做到这一点我将如何去做,因为我不能去指定自定义地址指针?

谢谢

3 个答案:

答案 0 :(得分:3)

我认为执行您要求的最佳方法是使用调试器。除非您在特权空间(即内核)中执行代码,并且从CPU的角度来看具有特权,否则您无法读取其他程序的内存。这是因为每个程序都在自己的虚拟内存空间中运行(出于安全考虑),甚至内核在虚拟内存空间中运行,但它有权将任何物理内存块映射到当前运行的虚拟内存空间。无论如何,我不会更深入地解释现代操作系统如何使用底层硬件管理内存,它会很长。

您应该真正考虑使用调试器。一旦您的调试器环境准备就绪,您应该在该内存块分配后暂停一下,这样调试器就会停止该程序,因此您可以根据需要检查新分配的内存块。根据您是否使用IDE,可以非常轻松地使用调试器;)

答案 1 :(得分:3)

/dev/mem可以使用。它是一个设备文件,它是物理内存的映像(包括非RAM内存)。它通常用于读/写外围设备的内存。 通过mmap(),您可以访问物理内存。

请参阅此linux documentation project page

答案 2 :(得分:0)

memedit是一个方便的实用程序,用于显示和更改内存内容以进行测试。 它的主要用途是显示SoC硬件寄存器,但它可用于显示RAM。它基于mmap()机制。这可能是编写自定义应用程序的良好起点。