我有一个函数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和参数?