learningOS开源操作系统社区
  • 首页
  • 训练营
  • 明星学员
  • 共建单位
  • 项目实习
  • 问答论坛
登录
    Copyright © 2024 opencamp.ai All rights reserved.
    关于forkret的地址问题
    匿名2023/07/31 19:51:26提问
      lab4student
    479

    在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
        暂无数据