本文主要是介绍33 增加系统调用(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
代码的总体的逻辑:
首先时在 GDT表中添加 系统调用门 的描述符。
然后是 在汇编中实现关于 系统调用门描述符指向的函数。
然后是 使用C语言实现 在屏幕上显示字符。
然后将调用 汇编语言的SYSTEM_CALL 的函数专门封装一个函数
然后在 任务中调用 系统调用的时候,会从特权级3的栈,切换到特权级0的栈,还需要手动的 压入三个参数,3个参数是在 SYSTEM_CALL 的GDT表中指定的。
这里需要一张图
这张图不是很理解。
这是一张对比图:
系统调用VS切换特权级的图。
调用 do_syscall 是不是在模仿 C的函数调用
然后是在汇编中对 系统调用前的 寄存器状态压栈
然后是在汇编中,切换内核的数据段。
然后是在汇编中,系统调用完之后,进行 寄存器的出栈。
然后在调用 do_syscalll 之前还要手动的 压入栈中三个参数,这三个参数是从 已经有的栈中取的。
然后在调用完do_syscall 之后,还要手动的释放一下。
整个 系统调用完之后,还需要,进行 返回。
这篇关于33 增加系统调用(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!