【问题标题】:Finding the address of a variable from another process [duplicate]从另一个进程中查找变量的地址[重复]
【发布时间】:2016-02-19 15:30:35
【问题描述】:

visual studio screenshot with memory window open

您好,请问有人可以给我一些信息吗?

我在 exe1 中有这段代码:

int number = 100;
int* p = &number;  // p = 0x0050f594

p指向内存地址0x0050f594

在另一个程序 exe2 中,我有这个:

int* p = (int*)0x0050f594;

所以对我来说,来自 exe2 的 p 指向来自 exe1 的变量号。

我认为这与在自己的地址空间中运行的不同应用程序有关,但是我仍然想知道如何使exe2的p指针指向exe1中的数字变量?

【问题讨论】:

  • 你不能,除非你运行的是旧的 MS DOS。或者使用一些共享内存。
  • Ollydbg、IDA Pro 等都可以做到。
  • 你可以使用WriteProcessMemory之类的东西。不过,我不知道您为什么要这样做,除非您正在编写调试器。这是可怕的应用程序设计。如果您需要在进程之间共享数据,请使用memory-mapped file
  • @CodyGray 作弊引擎可能是另一个动机。
  • 嗯,关键是除非你真的在写调试器,否则不值得学习。这是一个非常高级的任务,如果你问这个问题,可能你还不应该承担。 :-) 出于学习目的,了解建筑设计更为重要,purplepsycho 有你的答案。

标签: c++ pointers memory


【解决方案1】:

在现代操作系统中,进程是孤立的。每个进程都有自己的内存。操作系统负责将进程的内存地址(当进程要读取或写入内存时)转换为物理地址。

如果您没有操作系统、简单的(嵌入式平台)或者您正在编写内核模式驱动程序,您可以直接访问物理内存。

对于 x86 处理器,https://en.wikipedia.org/wiki/Protected_modehttps://en.wikipedia.org/wiki/Real_mode 的读取可能会很有趣。

【讨论】:

    【解决方案2】:

    好的,这里需要的是进程间通信,通常称为(IPC)。这在 Linux 或 Windows 中都可用。因此,通过使用任何 IPC 机制,您只需将值传递给其他进程,然后您就可以执行所需的操作。

    这不是您问题的直接答案,但您始终可以朝这个方向前进并检查。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      相关资源
      最近更新 更多