进程与线程-系统调用
2021/6/7 7:26:12
本文主要是介绍进程与线程-系统调用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
内核模式和用户模式
简单的说就是操作系统将一块块内存中的结构体设置了flags检查,内核模式下可以全局访问,用户模式下只能访问用户内容。在windows中常习惯称为ring 0和ring 3。
ring 3访问ring 0内容
既然做了权限检查,而ring 3进程肯定是会要访问ring 0内容,毕竟创建的时候就需要往ring 0里写结构了。
在windows中有常见两种方式。
使用int 2e切换
在windows系统中,使用int 2e进入陷阱门调用系统服务进行模式切换,从ring 3进入ring 0。
在调用系统服务进入ring 0时,系统会自动将cpu中的环境设置好,其中包括1.权限检查,2.内核模式下的栈
,然后进入调用KiSystemService()查询到真正要使用的内核内容。
使用快速系统调用
在上面进入方式中,需要查找在内存中的服务,快速调用是用寄存器取代内存查找。
® 在全局描述符表(GDT)中建立4个段描述符,分别用来描述供SYSENTER 指令进入内核模式时使用的代码段(CS)和栈段(SS),以及SYSEXIT指令从内核模式返回用户模式时使用的代码段和栈段。 ® SYSENTER/SYSEXIT 用于指定新的程序指针,也就是SYSENTER指令要跳转到的目标例程地址。Windows系统会将其设置为KiFastCallEntry的地址,因为KiFastCallEntry例程时Windows内核中专门用来受理快速系统调用的。SYSENTER_CS_MSR指定新的代码段,也就是KiFastCallEntry所在的代码段。SYSENTER_ESP_MSR用于指定新的栈指针(ESP)。新的栈段由SYSENTER_CS_MSR加8得来 ® 将一小段名为SystemCallSub的代码复制到SharedUserData内存区,该内存区会被映射到每个win32进程的进程空间中。以保证当应用程序每次进行系统调用时,NTDLL.DLL中的残根(stub)函数便调用这段SystemCallStub代码。SystemCallStub的内容因系统硬件的不同而不同。
这篇关于进程与线程-系统调用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?