c++ - 从另一个程序分配一个特定的内存地址,并改变它的值(value)

标签 c++ memory variable-assignment memory-address

最近放假几天,想用C++做一个处理内存地址的小程序实验。

我想知道的是,如果当前正在运行的程序(我们称它为程序 A)在堆中创建了一个指向 int 对象的指针,是否可以被另一个程序看到并被修改(程序 B)。

那么对于程序A,这是我的基本代码:

// Program A
#include <iostream>

using namespace std;

int main()
{
    // Pointer to an int object in the heap
    int *pint = new int(15);

    // Display the address of the memory in heap
    cout << pint << endl;

    // Display the value stored in that address
    cout << *pint << endl;

    return 0;
}

程序 A 的输出:

0x641030
15

对于程序B,我通过这个链接查看了如何分配特定的内存地址: http://www.devx.com/tips/Tip/14104

程序B的代码是:

// Program B
#include <iostream>

using namespace std;

int main()
{
    // assign address 0x641030 to p
    int *p = reinterpret_cast< int* > (0x641030);

    cout << p << endl;
    cout << *p << endl;

    return 0;
}

程序 B 的输出:

0x641030
... "Crash"

我不是很明白。我期待从 *p 显示 15 ,但它做了一些我没想到的事情。

我还尝试分配 *p到像 *p = 2000 这样的数字但当我尝试这样做时它也崩溃了。

此外,当我显示指针的地址和程序 A (cout << &pint;) 和程序 B (cout << &p;) 时,它们都显示相同的内存地址。

有谁知 Prop 体是怎么回事吗?我很感兴趣,但对正在发生的事情感到困惑。另外,我有可能做我在 C++/C 中尝试的事情吗?

** 编辑 ** 很抱歉没有提及我的平台,但我目前使用的是 Window 7 Professional

最佳答案

简短的回答是不同的进程使用完全不同的地址空间。如果不做更多的工作,进程 B 就无法读取或写入进程 A 的内存。

可以以特定于平台的方式执行此操作。 Win32 提供诸如 WriteProcessMemory 之类的函数您可以在其中直接将值插入另一个进程的内存空间。大多数操作系统都提供共享内存功能,对于 Win32,您可以使用内存映射文件,而 Unix 风格通常具有某种等效的“mmap”或“shmem”功能。

关于c++ - 从另一个程序分配一个特定的内存地址,并改变它的值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2153329/

相关文章:

c++ - 从 C++ 生成和打印电子表格

c++ - 使用 *this 作为返回值

php - 快速重复检索 "Store"数据的最佳方法是什么

python - 使用的内存超过可用内存

C:编译器在赋值时说 "incompatible types",但它们是相同的;和相关的东西

c++ - 我可以有条件地选择分配给哪个变量吗?

python - 了解 C++ 中的 pop_heap 以便在 Python 中实现

c++ - 如何用C++模拟鼠标光标移动

c++ - 达到特定内存限制后中断

shell - 该命令有什么问题...您能找到此命令中的错误吗?