gpt4 book ai didi

c - 用克隆模拟 vfork

转载 作者:行者123 更新时间:2023-12-04 05:51:06 27 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

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

关于c - 用克隆模拟 vfork,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10043173/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com