操作系统加载顺序与系统调用

2021-05-10  本文已影响0人  龙眠散人

bootsect.s   加载操作系统,bootsect.s 跳转至setup.s

setup.s        进入保护模式,setup.s 跳转至head.s 

head.s         初始化gdt表,head.s跳转至main.s

main.s         空闲内存初始化,清楚哪些内存已使用,哪些内存未分配

mem_init。

系统调用

内核态,用户态。

CRL为0是内核态,为3是用户态。

CRL与DS最低俩位DPL比较,DPL >= CPL则进入内核态。

main函数(蓝色部分)使用了系统调用,操作系统会拿出cs:ip的最低俩位,0表示内核态,3表示用户态。与DS的最低俩位进行比较,DPL >= CPL则进入内核态,否则被拒绝。进入内核态时,会发生中断,中断指令int将DPL置为3。

int 0x80进入,根据想调用的系统编号,选择相应的系统调用

传参,内嵌汇编。输入_NR_write 给eax,后三个参数分别给ebx、ecx、edx.

eax、ebx、ecx、edx

int 0x80将DPL置为3,DPL >= CPL,可以进入内核态

用int 0x80,将DPL置为3,设置系统调用参数,才能使用内核态系统调用。处于安全考虑不可以直接跳转。

上一篇下一篇

猜你喜欢

热点阅读