【问题标题】:Accessing a variable of the another program in C在 C 中访问另一个程序的变量
【发布时间】:2016-06-08 09:52:43
【问题描述】:

在python中,你可以通过id函数来了解变量的内存位置,所以:

X = "Hello world!"
print(id(X)) # Output is equal to 139806692112112 (0x7F27483876F0)

我试图用 C 中的指针访问变量(当然其他程序还活着):

#include <stdio.h>

int main(void){
    char *x = (char *) 0x7F27483876F0;
    printf("%s\n", x);

    return 0;   
}

我编译了代码,没有错误或警告,但是当我尝试运行程序时操作系统给出了分段错误。我该如何解决这个问题?

或者有可能吗?

【问题讨论】:

  • 每个程序都有自己的虚拟地址空间。所以你不能真正做到这一点。
  • 对我来说,你想要完成什么并不完全清楚。但是您不能从另一个程序直接访问属于一个程序的内存。每个程序都有自己的虚拟内存。如果您需要在两个进程(应用程序)之间进行通信,您有不同的选择:共享内存、进程间通信 (IPC)、套接字。您可以根据自己的需要和系统选择替代方案。
  • 减 2?这个问题写得很好。仅仅因为 idea 很疯狂并不能说明问题很糟糕。
  • @Bathsheba 即使这个想法并不完全疯狂,也有合法的(尽管非常少数)应用程序。调试器会这样做,游戏修补程序也会这样做(它们的合法性当然是一个有争议的问题,但除非它影响到其他人——例如在在线锦标赛中——我发现很难提出反对意见)。
  • 如果每个程序都有自己的虚拟地址空间,操作系统如何访问它?

标签: python c++ c


【解决方案1】:

如今,做这样的事情越来越不可能了。使用地址空间布局随机化等功能,您无法真正判断给定程序的位置,更不用说变量将加载到实际内存中了。

最好的办法是使用某种类型的消息传递。不知道为什么对你的问题投了反对票,但这似乎是一个合理的问题,即使这些天在技术上不可行。

【讨论】:

    猜你喜欢
    • 2016-03-11
    • 2014-09-30
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多