2

是否可以用克隆模拟 vfrok 的行为?到目前为止我有

pid=clone(fn,cStack,SIGCHLD|CLONE_FS | CLONE_FILES | CLONE_VM | CLONE_VFORK,NULL);

但我仍然需要传递我自己的堆栈,所以新进程在不同的堆栈框架中工作,但在相同的地址空间中(因为 CLONE_VM),据我所知,如果我调用 vfork 并且不使用来自 exec 的某些函数,新进程在与父进程相同的地址空间中运行,并且使用相同的堆栈帧。

那么是否可以使用克隆创建一个新进程,该进程在相同的地址空间中运行并使用与父级相同的堆栈帧?

4

1 回答 1

3

没有在汇编程序中编写函数是不可能的。这是一个无法“修复”的根本问题;对于大多数拱门(返回地址存储在堆栈上的任何拱门),甚至vfork系统调用包装器本身也必须用汇编而不是 C 编写。这是因为在子进程使用与父进程相同的堆栈运行后,它可能会覆盖函数( 、 或其他包装器)在父进程中需要返回的返回vfork地址clone

在汇编程序中,您只需在进行系统调用之前将返回地址保存在寄存器中。

于 2012-04-06T12:56:56.607 回答