C++ 内存地址会改变吗?如何动态找到它们?
我正在写一个简单的程序来访问另一个进程的内存。我一直在使用内存编辑器来查找希望程序检索并与ReadProcessMemory函数一起使用的变量的地址。到目前为止,还没有出现任何问题,但我不确定这些值的地址是否会根据其他程序运行的环境而变化 除了对程序本身的修改之外,我还应该关心这个问题吗?我注意到我的内存编辑器保存了与.exe(如.exe +exf+1986)的位置有关的地址,我很想实现这样的程序,但是我找不到任何方法来检索C++中的.exe的当前地址。< /p> < p>是的,它们改变了。 操作系统每次启动时都会将进程加载到不同的偏移量中,分配给C++ 内存地址会改变吗?如何动态找到它们?,c++,process,memory-address,C++,Process,Memory Address,我正在写一个简单的程序来访问另一个进程的内存。我一直在使用内存编辑器来查找希望程序检索并与ReadProcessMemory函数一起使用的变量的地址。到目前为止,还没有出现任何问题,但我不确定这些值的地址是否会根据其他程序运行的环境而变化 除了对程序本身的修改之外,我还应该关心这个问题吗?我注意到我的内存编辑器保存了与.exe(如.exe +exf+1986)的位置有关的地址,我很想实现这样的程序,但是我找不到任何方法来检索C++中的.exe的当前地址。< /p> < p>是的,它们改变了。 操
new
或malloc
的任何内容都很可能在每次运行代码时获得不同的地址。是的,它们会改变
操作系统每次启动时都会将进程加载到不同的偏移量中,并且每次运行代码时,分配给
new
或malloc
的任何内容都很可能得到不同的地址。是的,它们会改变。编写一个程序,输出几个变量的内存地址并运行几次。每次输出都应该不同,特别是在其他机器上。是的,它们会改变。编写一个程序,输出几个变量的内存地址并运行几次。每次的输出都应该不同,尤其是在其他机器上。对同一内存区域的多次访问也会遇到并发问题
顺序正确-W1a、W1b、R1a、R1b、W2a、W2b、R2a、R2b
顺序不正确-W1a、W1b、R1a、W2a、W2b、R1b、R2a、R2b
要解决此问题,您需要了解IPC,处理器间通信:
对于同一内存区域的多次访问,您还将遇到并发问题 顺序正确-W1a、W1b、R1a、R1b、W2a、W2b、R2a、R2b 顺序不正确-W1a、W1b、R1a、W2a、W2b、R1b、R2a、R2b 要解决此问题,您需要了解IPC,处理器间通信:
这里有两个问题:变量在进程内存空间中的位置,以及进程在物理内存中的位置。第一个应该和你有关,第二个不应该 局部变量(以及全局/静态变量)相对于内存中的程序位置具有相同的地址。动态分配的变量(new/malloc)每次都有不同的地址 当我说“内存”时,我指的是特定进程的虚拟内存空间:一个进程中的地址0x100不等于另一个进程中的地址0x100,并且通常不同于RAM中的单元号0x100。 实际地址通常并不有趣,因为ReadProcessMemory和内存编辑器都只处理这些相对地址。您不需要program.exe的位置
如果您对局部变量感兴趣,可以指望ReadProcessMemory每次都返回有意义的结果。如果您需要动态分配的内存,则需要找到一个本地指针,从中获取分配内存的地址,然后再次调用ReadProcessMemory。这里有两个问题:进程内存空间中变量的位置,以及进程在物理内存中的位置。第一个应该和你有关,第二个不应该 局部变量(以及全局/静态变量)相对于内存中的程序位置具有相同的地址。动态分配的变量(new/malloc)每次都有不同的地址 当我说“内存”时,我指的是特定进程的虚拟内存空间:一个进程中的地址0x100不等于另一个进程中的地址0x100,并且通常不同于RAM中的单元号0x100。 实际地址通常并不有趣,因为ReadProcessMemory和内存编辑器都只处理这些相对地址。您不需要program.exe的位置
如果您对局部变量感兴趣,可以指望ReadProcessMemory每次都返回有意义的结果。如果您需要动态分配的内存,则需要找到一个本地指针,从中获取分配内存的地址,然后再次调用ReadProcessMemory。谢谢。它们相对于.exe的地址会保持不变吗?这取决于编译器,但在大多数情况下,我希望静态变量与可执行映像的偏移量保持不变。堆栈或堆分配的更不可预测谢谢。它们相对于.exe的地址会保持不变吗?这取决于编译器,但在大多数情况下,我希望静态变量与可执行映像的偏移量保持不变。堆栈或堆分配的更不可预测,到目前为止,它一直在我的台式机和笔记本电脑上工作。我想这可能与我正在访问的程序是如何编写的有关。到目前为止,它一直在我的台式机和笔记本电脑上运行。我想这可能与我正在访问的程序是如何编写的有关。