Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法从另一个C程序访问一个C指针的数据_C_Memory_Memory Management - Fatal编程技术网

有没有办法从另一个C程序访问一个C指针的数据

有没有办法从另一个C程序访问一个C指针的数据,c,memory,memory-management,C,Memory,Memory Management,我有两个节目 程序A是这样的, int main(int argc, char** argv) { char* s = "hello"; printf(s); return (EXIT_SUCCESS); } s的基址是0x80484e0“hello”,现在我有了程序B,如下所示 int main(int argc, char** argv) { void* p = (void*)0x80484e0; char* c = (char*)p;

我有两个节目

程序A是这样的,

int main(int argc, char** argv) {

    char* s = "hello";

    printf(s);

    return (EXIT_SUCCESS);
}
s的基址是0x80484e0“hello”,现在我有了程序B,如下所示

int main(int argc, char** argv) {

    void* p = (void*)0x80484e0;

    char* c = (char*)p;

    while(*c)
    {
        printf("%c",*c);
        c++;
    }

    return (EXIT_SUCCESS);
}
在程序B中,“p”与程序B中的“s”指向相同的基址,但内容不同

即使“p”和“s”具有相同的基址,它们的内容也不相同,这是因为它们在不同的地址空间中作为不同的程序运行吗

在程序B中,“p”与中的“s”指向相同的基址 程序B,但内容不同

这就是虚拟地址和独立地址空间的魔力。您需要查看平台的“共享内存”

程序使用的地址是虚拟的。它们与RAM中的物理地址不同。内核在MMU和一个页面表的帮助下做了一些好的(讨厌的)事情,并将其隐藏在进程中

因此,例如在32b系统上,进程认为它是内存的唯一用户—它可以使用从
0
0xffffffff
的地址,但有一定的限制

如果您碰巧在POSIX系统上,您可以查看
mmap
shm\u open

在程序B中,“p”与中的“s”指向相同的基址 程序B,但内容不同

这就是虚拟地址和独立地址空间的魔力。您需要查看平台的“共享内存”

程序使用的地址是虚拟的。它们与RAM中的物理地址不同。内核在MMU和一个页面表的帮助下做了一些好的(讨厌的)事情,并将其隐藏在进程中

因此,例如在32b系统上,进程认为它是内存的唯一用户—它可以使用从
0
0xffffffff
的地址,但有一定的限制


如果您碰巧在POSIX系统上,您可以查看
mmap
shm_open

如果您使用的几乎是任何操作系统,那么就会有这样的概念。因此,一个进程中的某个内存地址在另一个进程中不一定相同。即使它很有可能映射到同一个物理地址,那么通过尝试读取它,您也有希望获得一个新的地址,因为您正在访问进程不“拥有”的内存。

如果您使用的是几乎所有的操作系统,则会有这样的概念。因此,一个进程中的某个内存地址在另一个进程中不一定相同。即使它很有可能映射到同一个物理地址,那么通过尝试读取它,您可能会得到一个响应,因为您正在访问进程不“拥有”的内存。

我相信这永远不会起作用


在程序A中,“hello”是可执行文件附带的字符串,在调用该程序时加载到内存中。

我相信这永远不会起作用


在程序A中,“hello”是可执行文件附带的字符串,在调用该程序时加载到内存中。

您所指的地址应特定于每个程序。您必须轮询操作系统以找到另一个程序的初始化位置。每个程序都存在于其自己的虚拟地址空间中。操作系统将虚拟地址映射到物理地址(或将其分页为物理地址)。一个进程中的虚拟地址在另一个进程中毫无意义。您所指的地址应特定于每个程序。您必须轮询操作系统以找到另一个程序的初始化位置。每个程序都存在于其自己的虚拟地址空间中。操作系统将虚拟地址映射到物理地址(或将其分页为物理地址)。一个进程中的虚拟地址在另一个进程中毫无意义。@AnanthaKrishnan:否,因为从
malloc
返回的地址是该进程特有的虚拟地址。只有操作系统知道虚拟地址真正指向哪里。@AnanthaKrishnan:不知道,因为从
malloc
返回的地址是特定于进程的虚拟地址。只有操作系统才知道虚拟地址真正指向哪里。