gpt4 book ai didi

c - 直接访问进程内存

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:07 24 4
gpt4 key购买 nike

简单的问题:

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

具体来说,而不是打字

int someValue = 5;

我可以做这样的事情吗:

VirtualMemory[0x0] = (int)5;

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

当我研究汇编程序基础知识时,处理器直接一个接一个地存储值,我想知道如何在 c 中这样做。

感谢您的所有回复。

干杯,

幸运

最佳答案

不完全是,因为在源代码中你不知道你的程序将被“加载到”哪个内存地址。所以程序中的所有内存地址都以“从程序开始的偏移量”类型的方式编码。

“进程加载器”将程序复制到内存中的部分职责是将“基本偏移指针”添加到所有其他偏移量,因此所有描述内存地址的“名称”都指的是实际内存地址,而不是“从程序开始的偏移量”。

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

您还需要一个名称作为开头,这意味着偏移量绑定(bind)到变量名称。通常,根据分配的项目在堆中四处搜寻比真正找到加载到内存中的程序的开始要容易得多(因为 C 编程语言并没有真正将该地址捕获到一个 in - 语言变量名称,布局在某种程度上取决于系统)。

关于c - 直接访问进程内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26935144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com