来自clone(2)联机帮助页
http://man7.org/linux/man-pages/man2/clone.2.html
long clone(unsigned long flags, void *child_stack,
void *ptid, void *ctid,
struct pt_regs *regs);

如何使用裸系统调用(不是libc)指定函数以及如何设置" struct pt_regs * regs"并不明显。在汇编中(...你是否以某种方式将IP作为寄存器堆叠在一个寄存器中[如何配置?]指向" * regs"因此指定了呼叫地址?)
我搜索过任何相关的例子。任何人都可以指出示例或澄清吗?
答案 0 :(得分:1)
除非你知道在哪里看,否则不是很明显。这适用于32位系统调用:
eax = 120 (syscall number for sys_clone)
ebx = unsigned long flags
ecx = void *child_stack
edx = void *ptid
esi = void *ctid
edi = struct pt_regs *regs
然后是int 80H
http://syscalls.kernelgrok.com/并搜索clone
对于64位系统调用: http://blog.rchapman.org/post/36801038863/linux-system-call-table-for-x86-64
然后查看http://lxr.free-electrons.com/source/arch/x86/include/asm/ptrace.h以获取pt_regs结构的定义
还有其他内容,只需阅读手册中的克隆版,并列出参数的信息。