push ebx push edx push ecx push eax retf
履行完膳绫擎几条指令后,应用法度榜样就可以运行起来了,并且应用法度榜样是运行在优先级为3的前提下,此时应用法度榜样不运行履行任何权限跨越3的指令,例如存储段存放器相干的指令,如不雅应用法度榜样履行类似指令:move ds, ax时,CPU会产生OD异常,于是根据上一节内容,应用法度榜样会被杀掉落。
asm_cons_putchar:AsmConsPutCharHandler equ asm_cons_putchar - $$ push ds push es pushad pusdad ;把内存段切换到内核 mov ax, SelectorVram mov ds, ax mov es, ax call kernel_api cmp eax, 0 jne end_app popad pop es pop ds iretdend_app: mov esp, [eax] popad ret
比拟于上个版本,代码精简了很多,那是因为我们不消再推敲应用法度榜样切换到内核时客栈若何切换,因为CPU已经帮我们处理了。这里我们再看看kernel_api的实现:
int* kernel_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax) { struct TASK *task = task_now(); if (edx == 1) { cons_putchar(eax & 0xff, 1); }else if (edx == 2) { cons_putstr((char*)(buffer.pBuffer + ebx)); }else if (edx == 4) { return &(task->tss.esp0); } return 0;}这里我们增长了一个标号为4的API调用,它只是简单的返回内核存储在TSS构造里的客栈指针,当调用完kernel_api后,它的返回值会被存储在存放器eax中,于是API中断发明eax不是0,那意味着eax存储的是内核在切换到应用法度榜样前的客栈指针,于是它把这个指针的值赋值给客栈指针存放器esp,于是语句popad是把客栈上存放的所有通用存放器的数值返回给对应通用存放器,这条指令对应的指令是start_app调用中的pushad指令,履行完popad指令后,客栈上存储的是大年夜start_app返回后的下一条指令的地址,因疵苡锫来履行ret指令时,CPU控制权会重现返还给内核。
最后我们再看看竽暌剐个应用法度榜样代码的修改,在api_call.asm中:
[SECTION .s32]BITS 32call mainmov edx, 4 ;返回内核int 02Dhapi_putchar: mov edx, 1 mov al, [esp + 4] int 02Dh ret%include "app.asm"
现代码调用完main函数后,也就是应用法度榜样履行完毕后,代码把4赋值给edx存放器,然后调用api中断,根据前面的分析,中断履行后CPU的┞菲握权就交还给了内核。别的因为应用法度榜样运行在优先级3,它要调用内核中断时,须要应用指令int 02Dh来触发中断,我们必须把02Dh号中断的优先级也设置成3,要不然应用法度榜样就没有资格调用02Dh号中断,于是在kernel.asm中做如下修改:
.2DH: Gate SelectorCode32, AsmConsPutCharHandler,0, DA_386IGate+0x60
【编辑推荐】
- JAVA回调机制(CallBack)
- JavaScript 装逼指南
- 挨踢部落坐诊第四期:Java消息队列的应用处景和感化
- 若何应用JavaScript构建机械进修模型
- 遗传算法的根本概念和实现(附 Java 实现案例)
像前面说过的一样,加上0x60就是把该中断的优先级设置为3.
完成所有代码修改后,内核运行情况如下:
固然运行结不雅与往常一样

但应用法度榜样运行时的优先级已经改变为3,是以应用法度榜样没有了履行高等指令的权限,是以内核获得了进一步的保护。
著作权归作者所有。贸易转载请接洽作者获得授权,非贸易转载请注明出处。
在应用法度榜样运行过程中,如不雅它须要调用内核API,也就是须要运行内核代码时,CPU会主动大年夜TSS中攫取esp0和ss0两个变量的信息,然后主动把客栈段和客栈指针切换到内核本来的客栈段和客栈指针,如许可以省却我们大年夜量的麻烦,于是相干代码便可以获得极大年夜的精简,例如实现API调用的02Dh中断的实现如下:
推荐阅读
【技巧沙龙】AI开辟者拭魅战营-7分钟打造1个定制技能。7月22号,我们等你一路!无论是生活在一线都会,照样栖身在偏远山村,今天中国的绝大年夜多半处所,互联网都已经如同水与电一样,渗入渗出进人们的>>>详细阅读
地址:http://www.17bianji.com/lsqh/36255.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示