在另一个进程的地址空间中运行代码

2021-04-22 13:49:44

Warning: Can only detect less than 5000 characters

我们可以刚刚获得基于文件副章程的过程API吗?然后需要将进入其他进程注入到其他过程中的需要。

无论发生在Sun Microsystems Solaris门上吗?每个维基百科,2003年为Linux 2.4.18制作了港口。

Linux端口只有“alpha质量”,并且悲伤地在2003年停止了它。门设施需要(1)内核支持和(2)一个非琐碎的用户空间库。门服务器需要该库以何种方式管理线程池,几乎需要与线程库的紧密集成。当一个组织生成内核和核心库而不是Linux社区时,这更容易。

远程系统调用通常需要内存中的参数(均在内)。如果目标任务正在运行,如何使用process_vm_exec_syscall保证您在运行任务中覆盖的任何内存更改的任何内存更改?例如,您可以使用堆栈。您是否必须远程Sycall一个MMAP / Munmap为您的参数分配专用内存?

谢谢你的好文章! “process_vm_exec`系统调用很有趣”,我在阅读文章时获得一些问题。 1.如果我正确理解,当前的`process_vm_exec`只能执行已经在目标进程中的代码' s地址空间,这可能对检测地址空间内容等任务可能是不方便的。换句话说,在它调用`process_vm_exec`之前,调用进程需要将代码注入目标(可能是`process_vm_writev`)。或者'process_vm_exec`提供了一些"带#34;它自己的代码到交换地址空间? 2.>执行将继续,直到**进程**使系统调用或接收信号。这个**过程**调用过程或目标过程?或两者?目标进程(和目标过程中的线程)是否会在系统调用时暂停其执行?如果是,调用过程如何恢复目标' s执行?如果不是,调用过程可能会错过目标由目标进行的系统调用,对吧? 3.当调用过程中有多个线程时,我认为事情会很复杂。例如,当一个线程呼叫`process_vm_exec`时,其他线程将在&#34中运行;错误的地址空间"并失败了。

> >执行将继续,直到**进程**使系统调用或接收信号。 >这个**过程**调用过程或目标过程?或两者?嗯,目标当然。当目标作出[制作SYSCALL / GETS信号]时,系统调用返回,如文本中所述。如果呼叫者以任何方式继续执行,这显然无法做到这一点。

感谢您的回复。 :)但我发现它比我早年的想法更复杂,我变得更加困惑。确认在`process_vm_exec`中将执行的呼叫者会做什么可能会有所帮助;以下是两个可能性:1)调用者块直到目标[制作SYSCALL /获取信号]; 2)调用者通过跳转到目标' S地址空间中的“UCTX”中指定的IP执行执行;当目标[制作SYSCALL / GETS信号]时,呼叫者以某种方式返回原始地址空间中的原始上下文。对于1),EMMM,似乎没有“EXEC”效果,因为当`PROCESS_VM_EXEC`返回时恢复原始地址空间;调用者只需等待目标“和”Syscall /信号“。对于2),在“Process_vm_exec`”之后似乎已经出现了新的控制流程,并且在目标' S Syscall /信号上终止(随时)终止新的控制流程。

我想以为解决&#34的正确方法;在纯粹的纯粹和不可能和#34之间实现纯粹的setuid()的POSIX语义是某处; (它的Glibc机械是漂亮的GNARLY)是"实现一个新的内核系统,提供整个过程语义和#34;内核处于更好的位置,能够比verspace要这样做。我轻微惊讶的是,没有人&#39。

有人在流程中工作沙箱/模拟器/仿真器< http://shadow.github.io/>,这看起来超级令人兴奋!我们'在现在的过程中,现在从基于LD_PRELOOD的interthente转移到PTRACE。这简化了很多东西,更强大,但是一个重要的性能。维护我们' D能够在没有多大工作的情况下从PTRACE切换到这个新的API。

有这样的"立即信号&#34是确实很漂亮;设施在同一地址空间内。并假设它将与SigMask集一起使用以阻止所有内容,它看起来很健壮。甚至提供另一个这样的"信号"当一个人已经运行时(假设呼叫者在两种情况下提供似乎合理的堆栈会有效。我假设像后退一样的东西也会起作用,因为这个设施可以使用与真实信号相同的Sigreturn蹦床。一个特别好的特征是,它与各种库完全兼容。 IE。今天图书馆基本上无法使用信号,因为它是〜不可能在使用该信号编号的库之间仲裁。当没有信号编号或涉及的任何状态(例如Altstack,Sigaction)时,它看起来没有任何兼容性问题。另一件事是漂亮的东西能够以某种方式指定没有节省/恢复巨大的SIMD状态,以实现这个设施的更便宜或更完善的使用(例如,垃圾收集器也可以选择使用它),并保存堆栈。这似乎是不可避免的,这种设施的安全使用需要调用者为每个线程和#39; s&#34的堆栈分配堆栈;远程呼叫"不必打扰SIMD寄存器会节省非活动字节数。