关于forkret的地址问题
匿名2023/07/31 19:51:26提问
    lab4student
327

在switch_to()函数最后三行中有

movl 4(%eax), %esp
pushl 0(%eax) # push eip

esp从当前进程的内核栈切换到了next进程的内核栈,然后在新的内核栈中压栈forkret的函数地址

现在内核栈中是这样分布的:

|  trapframe|

:  trapframe:

:  trapframe:
|  trapframe|

|  eip           |<--esp

然后ret返回到forkret(),接着forkret()调用forkrets汇编函数,在forkrets中内核栈是这样的

|  trapframe|

:  trapframe:

:  trapframe:
|  trapframe|

|  arg          |

|  eip           |<--esp

然后forkrets直接esp+4就跳转到__trapret开始popal,但是esp+4后应该是arg,而不是紧接着trapframe。

我不知道是哪里想错了,请指点。

回答(1
    推荐问答
      Simple Empty
      暂无数据