0

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

4

0 回答 0