2014-11-08 58 views
1

從克隆(2)手冊頁的例子的Linux x86_64的大會線程/ sys_clone()

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」指向的一系列寄存器中?指定通話廣告禮服?)

我已經搜索了任何有關的例子。任何人都可以指出例子或澄清?

回答

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結構

其他任何東西,只要閱讀手冊頁克隆和params信息佈局。

+0

啊,是的,謝謝@Gunner。在閱讀你的答案,我意識到我可以想起開源的美麗和做簡單: 'grep的-r pt_regs/usr/include目錄/ *' 然後看到 'unsigned long類型IP;' – ultra 2014-11-10 20:26:41