参考
问题-如何通过进行上下文恢复进程执行?如何使得进程运行于3特权级
1.恢复上下文数据-通过任务数据结构中的寄存器值恢复上下文,几种esp寄存器记忆pop指令恢复通用寄存器(通过汇编中的栈操作指令以及RegValue结构体变量,设置寄存器的值),每次pop向高地址四个字节,需要注意的是启动一个新任务可以看作特殊的任务切换,切换的目标任务上下文信息中通过寄存器的值为0.
2.特权级转移(高-低)
在调用门中retf从高特权级返回低特权级,于此类似,iret指令也能从高特权级返回底特权级。在这里的操作是将esp指向目标内存位置(eip,cs,eflags,esp,ss),借助iret指令降特权级执行
在中断于中断返回时可以知道,在中断发生时,可从底特权级转移到高特权级,中断返回时,从高特权级转移到低特权级
3.中断访问程序返回时的栈变化--iret命令操作的寄存器
4.代码的执行方案如下
5.进程启动"函数"
参数是任务数据结构的地址,esp+200/202表示偏移
详细的代码放置以下链接:https://pan.baidu.com/s/1altDhV-kJNWamUcc4r5oEw 提取码:h2ao