【问题标题】:How can I retrieve the address pointed to by a pointer address?如何检索指针地址指向的地址?
【发布时间】:2013-11-04 09:42:42
【问题描述】:

考虑以下几点:

int pointer = 0x0066D378;

我将如何在另一个程序的内存中检索该指针地址所指向的地址?请记住,不是“指针”变量的地址,该指针地址属于另一个程序,我怎样才能在其当前上下文中(从上述程序的内存中)获取地址?

干杯!

【问题讨论】:

  • 在另一个进程的内存中?操作系统不允许这样做。你为什么需要那个?
  • @dcastro 在我的程序与该程序挂钩的上下文中。 “注入”是正确的词吗?如果是这样,我的意思是。我正在玩我制作的两个程序,测试改变记忆等的效果,这可能吗?
  • 看看ReadProcessMemory/WriteProcessMemory API 函数(分别为msdn.microsoft.com/en-us/library/windows/desktop/…msdn.microsoft.com/en-us/library/windows/desktop/…)。
  • @Dennis 结果应该分配给什么变量类型?
  • @Daaksin:这些 API 函数使用原始字节数组进行操作。所以,你负责解释读或写操作的结果。

标签: c# pointers memory


【解决方案1】:

对于进程间通信(这似乎是您解决问题所需要的),您可以使用匿名管道或命名管道:

匿名管道:http://msdn.microsoft.com/en-us/library/bb546102.aspx
命名管道:http://msdn.microsoft.com/en-us/library/bb546085.aspx

操作系统负责将消息从一个进程发送到另一个进程。 如果两个进程在同一台机器上运行,我建议使用匿名管道,因为它们是轻量级的。 如果它们在同一个网络的不同机器上,命名管道是可行的方法。

【讨论】:

  • 优秀。谢谢!
【解决方案2】:

测试一下。 p 值将是 testT 字符串的地址,首先分配给 int i,然后分配给 p 作为 i 的值。

    private static string testT = "test line to have an address";

     static void Main(string[] args)
    {

        Test(testT);
    }

    static unsafe void Test(string str)
    {
        fixed (char* pfixed = str)
        {

            int i = (int)pfixed;
            int* p = (int*)i;
            int* c = p;
        }
    }

【讨论】:

  • 好吧,我需要变量testT中的指针指向的地址。并且目标指针在另一个程序中..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 2021-11-07
  • 2012-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多