如何专用/分配自定义内存位置,以便我可以用c ++编辑该位置

时间:2017-04-29 08:12:59

标签: c++ memory allocation

所以我试图在内存中编辑一个包含大量数据的位置(使用我放在该位置的数据创建一个线程)。但是为了使程序运行,需要将其放在该特定位置。

for (int i = 0; i < dumpSize; i++) *(char*)(0x91F40000 + i) = dumpData[i];

如您所见,0x91F40000是我想要数据的位置,但由于内存位置不可写,因此实际上并未更改该位置的内存。 我该怎么做才能编辑这个区域?

1 个答案:

答案 0 :(得分:2)

您可能希望使用placement new运算符(另请参阅this)。重要的是dumpData的类型。

但是,您需要确保地址(0x91F40000之后)是virtual address space的一部分。如何确定这可能是operating system具体的。由于ASLR,该地址可能会有所不同。

我强烈怀疑你的代码是错误的。通常,sizeof(int)是4(字节)。那你想要

for (int i = 0; i < dumpSize; i++)
   *(int*)(0x91F40000 + sizeof(int)*i) = dumpData[i];

我们不知道dumpData的类型是什么。或者你可以编码

for (int i = 0; i < dumpSize; i++)
   ((int*)0x91F40000)[i] = dumpData[i];

如果您的问题与不可写虚拟内存位置有关,则可以通过更改虚拟地址空间(或保护)的特定操作system calls来更改该问题;在Linux或POSIX上mmap(2)&amp; mprotect(2)

PS。你确定对地址空间,操作系统等有足够的了解吗?您的问题看起来很可疑或某些XY problem

在XBOX计算机上(你在评论中提到它,但它应该提到问题),你需要理解更多关于Xbox One system softwareXBOX 360 system software。我不知道细节。也许考虑安装一些Free60

您应阅读Operating Systems : Three Easy Pieces ,以便至少能够更好地提出此类问题。