美文网首页
Boot And Other

Boot And Other

作者: wangqing | 来源:发表于2017-02-22 14:38 被阅读0次
  1. **Cdecl **(函数调用)
低位地址
局部变量
上一层[ebp] ------ [ebp] pushl %ebp; movl %esp, %ebp
返回地址 (call 指令)
参数1
参数2
...
高位地址 (栈底)

段机制

Paste_Image.png
  • GDTR 48位 [limit(bytes), base (物理地址)]
  • GDT 64位
Paste_Image.png
  • Selector
Paste_Image.png
  • 关于权限
    • 数据段选择子(DS, SS等)里的请求特权级(Requested Privilege Level, RPL)
    • CS里的当前特权级(Current Privilege Level, CPL)
    • 段描述符里的描述符特权级(Descriptor Privilege Level, DPL)
    • 当描述符被加载时:
Paste_Image.png

(SS要求CPL,RPL,DPL必须完全一致)

  • IDTR [limt, base(线性地址)]
  • IDT
    • Task-gate descriptor
    • Interrupt-gate descriptor (调用时中断会被禁止)
    • Trap-gate descriptor (CPU不会禁止或打开中断, 保留原来样子)
Paste_Image.png
  • 硬件中断开始过程中:CPU会根据CPL和中断服务例程的段描述符的DPL信息确认是否发生了特权级的转换。比如当前程序正运行在用户态,而中断程序是运行在内核态的,则意味着发生了特权级的转换,这时CPU会从当前程序的TSS信息(该信息在内存中的起始地址存在TR寄存器中)里取得该程序的内核栈地址,即包括内核态的ss和esp的值,并立即将系统当前使用的栈切换成新的内核栈。这个栈就是即将运行的中断服务程序要使用的栈。紧接着就将当前程序使用的用户态的ss和esp压到新的内核栈中保存起来;
堆栈栈变化示意图 中断发生时实施特权检查的过程

相关文章

网友评论

      本文标题:Boot And Other

      本文链接:https://www.haomeiwen.com/subject/crvmbttx.html