为什么限制app使用的软件程序开发OS内核?

进入命令行后和linux命令类似但只能修改比如密码用户名等,改动任何系统原来的文件比如etxc等touch个文件等,重启后就消失了请问是怎么回事?特点:在根下rm-fr*后就grub不能启... 进叺命令行后和linux命令类似但只能修改比如密码用户名等,改动任何系统原来的文件比如etxc 等touch个文件等,重启后就消失了请问是怎么回事?
特点:在根下rm -fr*后就grub不能启动了我想肯定是系统设定什么了,请高手解惑谢谢!!

估计是没有安装X-Window的。

我只用了红帽和CentOS命令

如果已經安装了X窗口,在/ etc / inittab文件编号:在?修订后直接进入

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。伱的手机镜头里或许有别人想知道的答案

为了保护系统内核不受恶意程序嘚破坏我们原来的做法是专门为应用程序分配单独使用的内存,使得应用程序对数据的读写都限制在内核给他分配的内存段内程序对內存段的读写,完全是由DS寄存器指向的全局描述符决定的如果恶意程序通过修改DS寄存器的值,使得它在运行时让DS寄存器指向内核数据段的全局描述符,那么恶意程序就可以读写内核的数据了为了防范出现这种情况,我们要做的是让应用程序没有读写段寄存器的权力洇此我们就必须设定应有程序的优先级。

在X86架构下程序可以分为4个等级,分别是01,23.级别数越低,它的权限就越高系统内核是权限朂高的,因此它运行的优先级为0为了防止应用程序作乱,我们在启动它之前必须把它的优先级设定为最低级,也就是3.

为了让应用程序運行在低特权级上内核在启动应用程序前,必须把应用程序代码所在的内存段的级别设置为3在一个级别为3的代码段上运行指令时,如果指令的优先级高于3例如读写段寄存器等,那么就会触发CPU错误根据上篇文章讲过的内核异常处理机制,内核就会把应用程序的杀掉於是我们修改内核启动应用程序的相关代码,在write_vga_desktop.c中:

上面代码跟以前相比差别在于set_segmdesc调用中,设置内存段属性时我们多加了0x60,加上0x60的目的昰,把该描述符所指向的内存其优先级设置为3.这样一来应用程序一旦指向高优先级的CPU指令,例如move ds, ax这种读写段寄存器的指令时就会引发CPU異常。

同时我们通过调用task_now()获得当前正在运行的进程对象每个进程对象都含有一个TSS数据结构,其内容如下(在multi_task.h中):

TSS结构我们在早前讲到进程切换的章节里有过对它的详细解读这里我们需要注意它的几个变量:esp0, ss0, esp1, ss1, esp2, ss2。一个进程在运行时它可以运行在不同优先级下,在不同优先级丅运行时它必须使用不同的堆栈,这些变量就是用于存储不同优先级下对应的堆栈段和堆栈指针的如果进程要切换到优先级0,那么CPU会洎动从esp0和ss0中读取堆栈指针和堆栈内存段的全局描述符如果进程要从优先级0切换到优先级1,那么我们内核需要自己把对应优先级0的堆栈指針和堆栈段描述符的值存入到esp0和ss0也就是说如果进程从低优先级切换到高优先级时,CPU会自动帮我们从TSS中读取对应的堆栈段全局描述符和堆棧指针实现相应的堆栈切换。如果进程从高优先级切换到低优先级时需要进程自己把高优先级的堆栈段描述符和堆栈指针存储到TSS中的楿应位置。

这也是为何我们调用start_app时要把TSS对应的esp0变量的地址传入,因为start_app要启动一个优先级为3的应用程序一旦应用程序运行起来时,进程嘚优先级会从0变为3因此我们需要把切换前的堆栈指针和堆栈段存储到TSS结构的esp0和ss0中。我们再看看start_app的实现:

它的作用是把当前堆栈段描述符存储到TSS结构的ss0变量

上面代码中,有两条指令特别值得我们注意他们是:

ecx寄存器存储的是应用程序的代码段,ebx寄存器存储的是应有程序嘚内存段我们以前讲过,在把全局描述符赋值给段寄存器时需要把该描述符对应在全局描述符表中的下标乘以8后再传给段寄存器,为哬要乘以8呢假设某个全局描述符它的下标是1,乘以8相当于左移三位:

左移三位后会在右边空出3个0这三个0是有专门作用的,前两个0用于表示对应内存段的优先级也叫请求优先级,当内核要运行应用程序的代码时我们需要把应用程序代码段赋值给寄存器cs,把应用程序的内存段赋值给ds,如果要把优先级从0切换成3时,我们需要把请求优先级也设置为3这就是前面两条指令的作用:

上面两条指令运行后,最右边的兩个0都会变成1也就是把请求优先级设置成了3。还值得注意的是以前我们把CPU控制器交给应用程序时,使用的指令是call far但如果跳转时带有優先级切换,那么CPU就不允许使用call far 或者是jmp far 这两种指令我也不知道英特尔为何这么设计,要实现从优先级0跳转到优先级3必须先把优先级3对應的堆栈和堆栈指针压入当前堆栈,然后把优先级3的代码段描述符和IP指针压入堆栈然后再执行retf命令,这几个步骤对应的正好是最后几条指令:

执行完上面几条指令后应用程序就可以运行起来了,并且应用程序是运行在优先级为3的条件下此时应用程序不运行执行任何权限超过3的指令,例如存储段寄存器相关的指令如果应用程序执行类似指令:move ds, ax时,CPU会产生OD异常于是根据上一节内容,应用程序会被杀掉

在应用程序运行过程中,如果它需要调用内核API也就是需要运行内核代码时,CPU会自动从TSS中读取esp0和ss0两个变量的信息然后自动把堆栈段和堆栈指针切换到内核原来的堆栈段和堆栈指针,这样可以省却我们大量的麻烦于是相关代码便可以得到极大的精简,例如实现API调用的02Dh中斷的实现如下:

相比于上个版本代码精简了很多,那是因为我们不用再考虑应用程序切换到内核时堆栈如何切换因为CPU已经帮我们处理叻。这里我们再看看kernel_api的实现:

这里我们增加了一个标号为4的API调用它只是简单的返回内核存储在TSS结构里的堆栈指针,当调用完kernel_api后它的返囙值会被存储在寄存器eax中,于是API中断发现eax不是0那意味着eax存储的是内核在切换到应用程序前的堆栈指针,于是它把这个指针的值赋值给堆棧指针寄存器esp于是语句popad是把堆栈上寄存的所有通用寄存器的数值返回给对应通用寄存器,这条指令对应的指令是start_app调用中的pushad指令执行完popad指令后,堆栈上存储的是从start_app返回后的下一条指令的地址因此接下来执行ret指令时,CPU控制权会重现返还给内核

最后我们再看看有个应用程序代码的修改,在api_call.asm中:

当代码调用完main函数后也就是应用程序执行完毕后,代码把4赋值给edx寄存器然后调用api中断,根据前面的分析中断執行后CPU的控制权就交还给了内核。另外由于应用程序运行在优先级3它要调用内核中断时,需要使用指令int 02Dh来触发中断我们必须把02Dh号中断嘚优先级也设置成3,要不然应用程序就没有资格调用02Dh号中断于是在kernel.asm中做如下修改:

像前面说过的一样,加上0x60就是把该中断的优先级设置為3.

完成所有代码修改后内核运行情况如下:

虽然运行结果与往常一样


但应用程序运行时的优先级已经转变为3,因此应用程序没有了执行高级指令的权限因此内核得到了进一步的保护。

更多技术信息包括操作系统,编译器面试算法,机器学习人工智能,请关照我的公众号:


  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...

  • 更详细的讲解和代码调试演示过程请查看视频,当前点击链接 很多系统或程序之所以被破解被攻击很大程度上是攻击者利用...

  • 又来到了一个老生常談的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢 今天就这个问题开始,来谈谈操...

  • 更详细的讲解和代码调试演示过程请参看视频用java开发C语言编译器 更详细的讲解和代码调试演示过程,请参看视频如...

  • 文/雁南飞 周末我家娃娃很少睡午觉即使在幼儿园,囿时候老师也反应午睡不是那种很容易入睡的孩子对于我俩的周末,很...

IoT Studio 是支持 LiteOS 嵌入式系统软件开发的工具提供了代码编辑、编译、烧录 及调试等一站式开发体验,支持 C、C++、汇编等多种开发语言让您快速,高效地进 行物联网开发

IoT Studio 支持新增 MCU 列表,以满足用户其他开发板的业务需求

下载会得到一份压缩包,其中包含一份安装指南详细的安装教程可以参考该文档。

使用一鍵安装方式无须再手动安装其他工具,安装步骤如下:

选择安装路径可以改动,不要有中文和空格这里我保持默认:

安装完成,选擇是否安装ST-Link和JLink驱动和工具推荐全选:

IoT Studio安装成功之后会自动运行,在首次运行时检测到没有开发工具包选择“是”,软件会调用浏览器開始下载下载好之后双击运行developTools.exe

这里我是Administrator不同的用户目录名称不同!

之后软件会自动开始安装ST-LinkJ-**Link**,根据提示安装即可

打开工具目录,里面有两个路径需要我们在IoT Studio中配置:

这两个路径仅作了解即可下一节创建项目时会说明如何在IoT Studio中配置。

在IoT Studio启动页面选择用户指导文檔,即可打开 IoT Studio 完整的使用指南在以后使用的过程中遇到任何问题,都可以在此文档中找到答案

【版权声明】本文为华为云社区用户原創内容,转载时必须标注文章的来源(华为云社区)文章链接,文章作者等基本信息否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容欢迎发送邮件至:

进行举报,并提供相关证据一经查实,本社区将立刻删除涉嫌侵权内容

我要回帖

更多关于 限制app使用的软件 的文章

 

随机推荐