繁体   English   中英

Linux中的Clone()系统调用

[英]Clone() system call in linux

当我通过传递0作为stack_start来调用克隆系统调用时会发生什么? 根据克隆的手册页,它应该返回-EINVAL ,但是当我这样做时,它显示SIGSEGV (11)错误。

clone(func,NULL,0,args);

应该返回-EINVAL,但是它与SIGSEGV失败

根据linux内核,有这样的调用链:

sys_clone(... stack_start ...) -> do_fork

do_fork(... stack_start ...) -> copy_process

copy_process(... stack_start ...) -> copy_thread

X86_32上的copy_thread(... stack_start ...)X86_64上的copy_thread(... stack_start ...)

查看copy_thread会导致我假设该函数不检查stack_start正确性(代码中的sp参数),因此在克隆后,我们将执行一个任务,该任务具有无效的堆栈指针,并且第一个引用位于零地址处会导致SIGSEGV

我建议您也查看克隆功能的glibc包装器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM