如何访问计算机的 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 的所有字节?的主要内容,如果未能解决你的问题,请参考以下文章
RAMSRAMSDRAMROMEPROMEEPROMFlash