3 保护操作系统(1)(harib18c)
接下来我们先稍微偏离一下主线,谈一谈关于操作系统保护的话题。
操作系统需要运行各种应用程序,而这些应用程序有可能是操作系统开发者编写的,也有可能是用户、别的软件开发商或者是某个自由软件作者出于善意编写的。然而,也有些人会出于恶意编写一些捣乱的应用程序出来。
最近大家都下载并安装了很多自由软件吧,那些软件的作者是否值得信赖呢?大多数人往往并不关心这一点,但某些情况下,下载的软件中可能包含着电脑病毒(当然,大多数情况下作者并非有意为之,而是作者的电脑不小心感染了病毒,导致发布出来的软件也感染了病毒)。
即便没有恶意,应用程序中也可能存在bug,而且某些bug可能会对操作系统造成破坏。所谓对操作系统的破坏,严重程度也不同,比如擅自删除重要文件、使其他任务的运行产生异常,或者造成操作系统死机而不得不重新启动等等。无论如何,这些都给用户造成了麻烦。
既然操作系统需要为应用程序的运行提供支持,也就必须考虑如何应对这样的问题。如果应用程序出了问题就会破坏操作系统的话,那大家都不敢用下载下来的软件了(当然,这样说夸张了些)。即便是自己编写的程序,一旦有了bug也可能会使操作系统遭到破坏,这实在是太可怕了。因此,如果稍微花点工夫就可以让操作系统变得更加安全,那我们没有理由不这样做。
值得庆幸的是,我们所使用的x86架构CPU为我们提供了保护操作系统的功能,只要我们学会运用这些功能完善操作系统的安全性,就可以最大限度地保护操作系统。我们的目标是:没有漏洞!
■■■■■
首先,我们来做一个用来捣乱的应用程序。
本次的crack1.c
void HariMain(void)
{
*((char *) 0x00102600) = 0;
return;
}
程序的功能很简单,向内存的0x102600地址写入一个0,虽说仅此而已,但破坏力却十分强大。这么说可能大家还不明白,我们来实际操作一下。
首先来“make run”,然后输入“crack1”……大家做好心理准备没?……按下回车。
破坏后的状态?
哎呀?貌似什么都没有发生嘛。其实系统已经彻底坏掉了,不信的话输入dir试试看。
重新启动一下系统就恢复了。真要不小心运行了这样的程序,除非重新启动,否则就什么都做不了了,这种程序我们必须在它产生破坏作用之前强行终止才行。
咚!命令错误!