我正在使用Linux操作系统对硬件进行一些调试。
现在没有办法让我知道它是否有效,除非我能检查我要求它写的分配的ram。
是否有某种方法可以从同一操作系统中运行的外部程序检查该块或RAM中的内容?
如果我可以在C中编写一个小程序来做到这一点我将如何去做,因为我不能去指定自定义地址指针?
谢谢
答案 0 :(得分:3)
我认为执行您要求的最佳方法是使用调试器。除非您在特权空间(即内核)中执行代码,并且从CPU的角度来看具有特权,否则您无法读取其他程序的内存。这是因为每个程序都在自己的虚拟内存空间中运行(出于安全考虑),甚至内核在虚拟内存空间中运行,但它有权将任何物理内存块映射到当前运行的虚拟内存空间。无论如何,我不会更深入地解释现代操作系统如何使用底层硬件管理内存,它会很长。
您应该真正考虑使用调试器。一旦您的调试器环境准备就绪,您应该在该内存块分配后暂停一下,这样调试器就会停止该程序,因此您可以根据需要检查新分配的内存块。根据您是否使用IDE,可以非常轻松地使用调试器;)
答案 1 :(得分:3)
/dev/mem
可以使用。它是一个设备文件,它是物理内存的映像(包括非RAM内存)。它通常用于读/写外围设备的内存。
通过mmap()
,您可以访问物理内存。
答案 2 :(得分:0)
memedit是一个方便的实用程序,用于显示和更改内存内容以进行测试。
它的主要用途是显示SoC硬件寄存器,但它可用于显示RAM。它基于mmap()
机制。这可能是编写自定义应用程序的良好起点。