简单问题:
直接访问我的程序的虚拟内存是可能的吗?怎么可能?
具体而言,而不是键入
int someValue = 5;我可以这样做吗?
VirtualMemory[0x0] = (int)5;我只是在问,因为我希望将值存储在彼此的旁边,以获得一个很好的、很小的内存映射。
当我查看汇编程序的基础知识时,处理器直接存储彼此之间的值,我想知道如何在c中这样做。
谢谢你的回复。
干杯,
幸运的
发布于 2014-11-14 17:04:09
不完全正确,因为在源代码中,您不知道您的程序将被“加载到”哪个内存地址。因此,程序中的所有内存地址都是以“从程序开始偏移”的方式编码的。
“进程加载器”将程序复制到内存中的部分责任是将“基本偏移量指针”添加到所有其他偏移量集中,因此所有描述内存地址的“名称”都引用了实际的内存地址,而不是“程序开始时的偏移量”。
这通常是一件好事,就好像它们是直接编码的一样,两个需要相同地址集的程序在不破坏彼此共享内存的情况下不能同时运行。此外,将程序加载到不同的启动地址是不可能的,因为在程序内存之外行走(如果您重新定位程序而不重写内存地址引用,几乎可以保证)将在操作系统的内存管理监视器中引发分段错误。
此外,您还需要一个名称开始,这意味着偏移是绑定到变量名称。通常,根据指定项在堆中查找比真正找到加载在内存中的程序的开始要容易得多(因为C编程语言并不真正将该地址捕获到一个内语言变量名中,而且布局在某种程度上取决于系统)。
https://stackoverflow.com/questions/26935144
复制相似问题