c – 从用户应用程序访问ring 0模式(为什么Borland允许这样做)

c – 从用户应用程序访问ring 0模式(为什么Borland允许这样做),第1张

概述随着学期的最后期限临近,我决定开始在我大学的 *** 作系统课程中开展一个项目. 项目分配的问题在于它要求学生开发一个将作为简单内核(基本过程和线程管理)执行的用户应用程序(exe). 我想到的第一件事是:我该如何在用户应用程序中执行特权代码? 在咨询了其他学生(按时完成项目)之后,我了解到他们能够使用Borland 3.1编译器执行特权代码而不会出现问题.然而,他们都没有发现这种奇怪,也不知道为什么会这 随着学期的最后期限临近,我决定开始在我大学的 *** 作系统课程中开展一个项目.
项目分配的问题在于它要求学生开发一个将作为简单内核(基本过程和线程管理)执行的用户应用程序(exe).

我想到的第一件事是:我该如何在用户应用程序中执行特权代码?

在咨询了其他学生(按时完成项目)之后,我了解到他们能够使用Borland 3.1编译器执行特权代码而不会出现问题.然而,他们都没有发现这种奇怪,也不知道为什么会这样.为什么(这里有更好的问题,如何)Borland会这样做吗?这是否违反 *** 作系统安全的基本原则?

注意:我添加了C标记,因为该项目应该被编写为C应用程序,大多数特权代码都作为内联汇编执行.

更新我的问题最初的措辞有点差.当然,我能够使用任何编译器使用特权指令编译代码 – 运行代码是问题.

解决方法 两件事情:

>在8086实模式的时代,没有特权级别. Borland 3.1是一个16位编译器.如果您正在运行它在现代版本的Windows上生成的代码,它将使用NTVDM在Virtual 8086模式下运行,该模块也没有权限级别.
>即使使用现代编译器/汇编器,即使在保护模式和长模式下,它通常也不会抱怨特权指令.这个源代码在MSVC 2015中编译得很好,但每当我运行它时都会崩溃,因为它试图访问一个禁止用户模式应用程序的寄存器:

int  main(){    __asm    {        mov eax,cr0        or eax,1        mov cr0,eax    }    return 0;} 
总结

以上是内存溢出为你收集整理的c – 从用户应用程序访问ring 0模式(为什么Borland允许这样做)全部内容,希望文章能够帮你解决c – 从用户应用程序访问ring 0模式(为什么Borland允许这样做)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1218426.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存