thread_creation的堆栈指针和陷阱框架

时间:2013-11-11 03:10:57

标签: c multithreading process stack

我有一个函数clone,我需要找到堆栈上的参数的地址以及返回地址,它具有以下原型

int clone(void (*fcn) (void*), void *arg, void * stack); 

我从函数clone中调用thread_create,它与以下内容相同:

int thread_create(void * (*start_routine) (), void *arg)
{
void *stack=malloc(4096); // I allocate stack for each created thread in the amount of one page
return clone(start_routine,arg,stack);
}

我对这些代码感到困惑。我觉得他们应该是对的,但不确定。因此,如果您能确认克隆中的这些代码是否正确,如果不是如何纠正它们,那将会很棒?

1) process->trap_frame->esp = stack - sizeof (void *)

2a) process->trap_frame->return_addr= stack + 4096 - 2*sizeof(void*);

2b) process->trap_frame->return_addr= stack + sizeof(stack) - 2*sizeof(void*);

3a) process->trap_frame->arguments=stack+4096-sizeof(void*);

3b) process->trap_frame->arguments=sizeof(stack)+4096-sizeof(void*);

除了我上面编写的代码片段之外,你如何在trap_frame中的虚拟主体中找到sp(esp),return_addr和参数?

0 个答案:

没有答案