完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
跳转到应用层
到这一步简陋内核初步完成,此时的系统位于0级特权的内核层,而应用程序位于3特权级的应用层,若想从内核到应用层,在特权级跳转的过程中必须提供目标代码段和栈段以及其他跳转信息。 X86中的门 存在的目的 由于操作系统运行在0级特权下,应用程序在3级特权下,出于保护和稳定的目的,操作系统通过"门"机制向用户态程序提供必要服务。 共有四种门:中断门,陷阱门,调用门,任务门。 其中中断门,陷阱门,任务门都可以由门描述符描述(IDT) 如何跳转 特权级跳转的过程中必须提供目标代码段和栈段以及其他跳转信息。 当程序借助CALL指令 访问更高特权级的调用特权级的调用门时,处理器将按照以下步骤为程序准备执行环境。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k3GyvYLC-1636897127731)(C:Users86187AppDataRoamingTyporatypora-user-imagesimage-20211030094608331.png)] 返回过程:
这套指令的显著优点:整个调用过程中不会执行数据压栈,这样就免去了访问内存的时间消耗,而且在跨特权级跳转时不会怼段描述符进行检测。但SYSENTER只能从3级特权跳转到0级,而SYSEXIT也只能从0级跳转到3级。无法再其余特权级跳转。因此只能为应用程序提供系统调用,无法在内核层执行系统调用,而中断型系统调用却可以在任意权限下执行。 SYSEXIT:快速返回3级特权,只能在0级下使用。在执行前,处理器必须为其提供3级特权级的衔接程序以及3特权级的栈空间,这些数据将保存在MSR寄存器和通用寄存器当中
目前还没有应用层程序,所以init依然是个内核线程。 执行execve系统调用API,可是init内核线程执行新的程序,进而转变为应用程序。但由于STSENTER/SYSEXIT指令无法像中断指令那样,可在内核层执行系统调用API,所以我们只能通过直接执行系统调用API处理函数逇方法来实现。 首先确定函数init的函数返回地址和栈指针,并缺德进程的Struct pt_regs结构体。接着采用内嵌汇编语句的方法,更新进程的内核层栈指针,同时将调用do_execve函数为新程序(目标应用程序)准备执行环境,并将struct pt_regs结构体的首地址作为参数传递给do_execve函数 void user_level_function() { while(1); } unsigned long do_execve(struct pt_regs * regs) { regs->rdx = 0x800000; regs->rcx = 0xa00000; regs->rax=1; regs->ds=0; regs->es=0; memcpy(user_level_function,(void *)0x80000,1024); return 0; } 在do_execve函数中,通过设置pt_regs结构体的成员变量来搭建应用程序的执行环境。当函数返回时,处理器会跳转至ret_system_call模块处执行,进而将struct pt_regs结构体的各个成员变量还原到对应的寄存器中。函数中的代码regs->rdx=0x800000保存着应用层程序的入口地址,而regs->rcx=0xa00000保存着应用程序栈顶地址,选用这两个寄存器(RDX RCX)是与SYSEXIT的需求相呼应。此处的memcpy负责将应用层的执行函数user_level_function复制到线性地址0x800000处,当处理器切换到应用层后,应用程序将从应用层的线性地址0x800000处开始执行。 |
|
|
|
只有小组成员才能发言,加入小组>>
3329 浏览 9 评论
3007 浏览 16 评论
3503 浏览 1 评论
9085 浏览 16 评论
4099 浏览 18 评论
1211浏览 3评论
620浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
607浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2349浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1913浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-4 13:49 , Processed in 1.188447 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号