直接访问进程内存

时间:2014-11-14 16:59:40

标签: c memory-management virtual-memory

简单的问题:

是否有可能,以及如何直接访问我的程序的虚拟内存?

具体来说, 而不是键入

int someValue = 5;
我可以这样做:

VirtualMemory[0x0] = (int)5;

我只是问,因为我希望将值存储在彼此旁边以获得一个漂亮的小内存映射。

当我研究汇编程序的基础知识时,处理器会直接在彼此之后存储值,我想知道如何在c中这样做。

感谢您的所有回复。

干杯,

幸运

1 个答案:

答案 0 :(得分:1)

不完全正确,因为在源代码中,您不知道您的程序将被加载到"中的哪个内存地址。因此,程序中的所有内存地址都编码为从程序开始的#34;偏移量。类型的方式。

过程加载器的一部分"将程序复制到内存中的责任是添加"基本偏移指针"对于所有其他的事件,所有的"名称"描述内存地址是指实际的内存地址,而不是程序开头的#34;偏移量。

这通常是一件好事,就好像它们是直接编码一样,需要同一组地址的两个程序不能同时运行而不会破坏彼此的共享内存。此外,将程序加载到不同的起始地址是不可能的,因为走出程序的内存(几乎保证如果重新定位程序而不重写内存地址引用)将在操作系统中引发段错误#39; s内存管理监视器。

此外,您需要一个名称来启动,这意味着偏移量绑定到变量名称。通常,基于alloc的项目在堆中捕鱼比在内存中加载程序的开始要容易得多(因为C编程语言并没有真正捕获到地址为一个语言中的变量名称,布局在某种程度上取决于系统。)