如何访问计算机的 RAM 和 ROM 的所有字节?

Posted

技术标签:

【中文标题】如何访问计算机的 RAM 和 ROM 的所有字节?【英文标题】:How can I access all bytes of RAM and ROM of my computer? 【发布时间】:2012-07-13 09:00:54 【问题描述】:

我尝试了指针和引用(&),但是当我尝试获取信息时(我只是从内存中读取)计算机“哔”并且程序终止。 将指针分配给字节(char *)时没有问题。但是当我读到那台电脑时发出哔哔声。 (x=*p;)

Windows xp,1GB + 128 MB 内存。我不知道我的 eproom + eeproms。

我可以使用 System() 函数来使用操作系统命令来访问内存吗?你认识任何人吗?

【问题讨论】:

IIRC:你不能,至少没有 ring-0 访问权限。 一个问题:你为什么需要这样做? 阅读en.wikipedia.org/wiki/Virtual_memory和en.wikipedia.org/wiki/Virtual_address_space 我建议你从基础开始,阅读 Ulrich Drepper 的优秀“每个程序员应该知道的关于内存的知识”:akkadia.org/drepper/cpumemory.pdf 这是您要找的吗? ReadProcessMemeory - How to examine the memory area associated with a process 【参考方案1】:

你不能。现代操作系统使用不允许这样做的虚拟模式和内存保护。要访问所有物理 RAM,您很可能需要为现有操作系统编写自己的操作系统或内核驱动程序。

【讨论】:

@tuğrulbüyükışık 如果您选择编写自己的操作系统,则需要编写一些汇编代码。如果您选择编写 Windows 内核模式驱动程序,则无需在那里编写任何汇编代码。 我的意思是,这是最少的。但是,您需要了解更多计算机和操作系统架构方面的知识:) 你也可以买一个旧苹果 ][ 或类似的:)【参考方案2】:

你不能这样做,因为你没有权限这样做,当你运行你的代码时,它会创建一个进程来运行你的程序,并且每个进程只能访问它的地址空间,访问其他进程的地址空间 make操作系统的陷阱,你的内核暂停工作并检查你的堆栈和你的进程,然后它发现你做了一个非特权任务,然后它杀死你的进程

【讨论】:

【参考方案3】:

这应该对我有帮助:

typedef struct _MEMORY_BASIC_INFORMATION 
PVOID BaseAddress;
PVOID AllocationBase;
DWORD AllocationProtect;
DWORD RegionSize;
DWORD State;
DWORD Protect;
DWORD Type;
 MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;

还有这个:

VirtualQueryEx(
HANDLE hProcess,
LPCVOID lpAddress,
PMEMORY_BASIC_INFORMATION lpBuffer,
DWORD dwLength
);

至少在我的操作系统中 感谢 Bo Persson 和 Jerry Coffin 或 Mysticial

【讨论】:

以上是关于如何访问计算机的 RAM 和 ROM 的所有字节?的主要内容,如果未能解决你的问题,请参考以下文章

详解ROM和RAM

RAMSRAMSDRAMROMEPROMEEPROMFlash

52单片机如何对PC串口发送来的数据进行存储,存储在哪?RAM还是ROM中?

ROM、RAM、DRAM、SRAM和FLASH的区别是啥

计算机组成原理——存储器系统考研题

ROM,RAM,DRAM,SRAM和FLASH的区别