

前几天在群里看群友们聊天,其中一个人说,想通过提高项目管理能力来更好的管理生活,而群主说项目管理中的很多思想来源于生活。那这样是不是就形成了一个很好的互补呢?我觉得是的。项目管理也算是一门科学,当然了也要了解人性;生活虽然算不上是科学,但是也要了解人性,再加上一些科学的方式。不过都是说起来容易,做起来难啊!要是有信心,我觉得还是可以的!
很多事情要是往一起联系,感觉很多事情还是能联系到一起的。比如今天这篇文章就是两个看起来不相关的东西,但是还是能联系起来。(文章的题目是用来唬人的)
上面是调侃,下面是正文~!
0x01:恶意下载器:Downloader
有一种恶意软件,它本身不搞破坏,也没有破坏的功能,就是它不窃取你的数据,不控制的你的电脑之类的,但是它就是恶意软件。那它到底干了啥呢,被叫做恶意软件。这种恶意软件就是下载器,或者叫 Downloader。
Downloader 虽然不具备直接的破坏功能,但是它也是一种被专业设计出来的恶意软件,它的核心目的本身就不是要造成破坏,而是负责从远程服务器下载并执行更具危害的恶意程序。(很多下载站的下载器,虽然不给你下载恶意程序,但是它给你的电脑装一堆让你的电脑卡的要命的软件,也让人很烦躁!)
我们这里不讨论它的恶意功能,只是说这种设计很有意思。Downloader 本身体积很小,方便传播,这是它的优点;靠它的优点,它先侵入系统以后去下载更多的真正具有威胁的程序回来,并去运行它们。这样就相当于把恶意功能和加载器分离了。更符合 “专业的人干专业的事” 这样说法。软件设计上有一个名词叫 “责任分离”,是不是这样?
0x02:可执行程序加载器:Loader
说完 Download 以后来说说一个叫 Loader 的东西。我们在使用计算机的时候,通过 双击 或者 命令行 的方式运行程序的时候,操作系统都会通过一个 Loader 把程序文件装载到内存中,然后让它运行,完成从 程序 到 进程的一个过程。当然了,中间的步骤也是很多的,比如创建进程、线程的内核对象,映射文件、解析导入表、地址重定位等一系列过程。
我们的 pe、elf 等可执行文件都是这样被加载起来的。
加载器是操作系统的一部分,这部分对我们使用的用户来说是透明的,用户不用关心的,程序员也不用关心它。
不过说到这里,是不是也有前面 Downloader 的那种感觉了,程序员可以写不同的程序,然后都依靠相同的 Loader 就可以帮我们把我们的程序加载起来。也是一种 “责任分离”,也完成了 “抽象”,也完成了 “抽象”。
0x03:其他的 Loader
类似这样的设计还是挺多的,比如早期操作系统加载的时候 MBR 只有 512 字节,能做的事情很有限,所以它会把后面的部分(真正的内核吧)加载进内存,然后再跳转到加载入内存的部分进行后续的工作。其实现在的设计也是类似的。内核的 Loader 是引导操作系统的终点,但是也是操作系统开始运行的起点吧。
0x04:总结
为什么从 Downloader 开始说起呢,因为这个比较常见吧,因为现在的下载站下载回来的经常都是下载器。这些下载器再帮我们下载真正的软件。包括一些游戏官网也是这样,游戏官网的下载器可以帮我们更快的下载游戏。
然后通过 Downloader 引出进程的 Loader 和内核 Loader,就可以发现它们的设计思路殊途同归啊,抽象、解耦、分治、模块化……
设计这种思路是通用的,比如多核的 CPU,在主频没办法提高的时候,就变成了多核,这不就相当于单机性能到达极限的时候,去做个集群么!