有没有办法强制一个进程从另一个进程共享地址 space?

Is there a way to force a process to share address space from another process?

这是一个纯理论问题。就我而言,每个进程都有不同的寻址 space 并且一个进程中的每个线程共享相同的内存 space?

有没有办法,尤其是在某些 UNIX 系统中改变这种行为。更清楚一点,让两个进程共享同一个地址space? 或者使来自同一进程的两个线程具有不同的地址 space?

我想你应该阅读 this

共享内存 — 是可以由多个程序同时访问的内存,旨在提供它们之间的通信或避免冗余副本。共享内存是一种在程序之间传递数据的有效方式。

是的。 Google gvisor 或 rump 以获取有关如何执行此操作的示例。简而言之,你从一个母进程开始,它 forks() 以创建新的 children。这些 children 由 ptrace() 管理,将它们与内核隔离开来。母进程然后根据需要操纵 children 的地址 space(s);使它们相同是一种选择。

通常会涉及一些引导技巧,因此当 child 调用 fork() 时,Mother 会分叉并执行一个已知的二进制文件(重新:space 布局),然后继续将原始 fork()ers aspace 克隆到新 fork() 中。