麒麟操作系统内核同其他操作系统内核的相似性分析

上传人:s9****2 文档编号:476198743 上传时间:2023-01-20 格式:DOCX 页数:19 大小:88.16KB
返回 下载 相关 举报
麒麟操作系统内核同其他操作系统内核的相似性分析_第1页
第1页 / 共19页
麒麟操作系统内核同其他操作系统内核的相似性分析_第2页
第2页 / 共19页
麒麟操作系统内核同其他操作系统内核的相似性分析_第3页
第3页 / 共19页
麒麟操作系统内核同其他操作系统内核的相似性分析_第4页
第4页 / 共19页
麒麟操作系统内核同其他操作系统内核的相似性分析_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《麒麟操作系统内核同其他操作系统内核的相似性分析》由会员分享,可在线阅读,更多相关《麒麟操作系统内核同其他操作系统内核的相似性分析(19页珍藏版)》请在金锄头文库上搜索。

1、麒麟操作系统内核同其他操作系统内核的相似性分析Copyright (c) 2006 Dancefire (dancefire#gmail).Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, n

2、o Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled GNU Free Documentation License.作者:Dancefire (dancefire # gmail dot com ) 2006/04/27( PDF 格 式 及 分 析 所 用 脚 本 程 序 下 载 连 接 :http:/www.dancefire.org/file/kernel_similarity_analysis_1.0.zip )原始链接:http:/

3、 合作研制的服务器操作系统。按照麒麟官方的说法:“Kylin服务器操作系统是国家863计划的重大研究成果,拥有完全自主版权的内核,与Linux 在应用上二进制兼容,并支持64位,是中国独立研发成功的、具有完全自主知识产权的服 务器操作系统。”1-来自麒麟官方网站http:/ 和863 计划官方网站2 http:/www.863. org. cn/863_105/indust/indust_news/200409160008. html“银河麒麟操作系统是针对未来的主流网络服务和高性能计算服务的需求,参照国际主流标 准,参考Darwin、FreeBSD、Linux和其它商用操作系统,借鉴UNIX

4、操作系统和微内核操作 系统的设计思想,设计并实现具有自主版权的、可支持多种 CPU 芯片和多种计算机体系结 构的、具有高性能、高可用性与高安全性的、并与Linux应用和设备驱动二进制兼容的中文 服务器操作系统, ”摘自麒麟操作系统2.0.21 内自带的帮助文档近日,有不少人对麒麟操作系统宣称的“完全自主版权”和“中国独立研发成功”这两个核心问 题产生了质疑。随着麒麟 2.0.14 和 2.0.21 系统可以通过麒麟的官方网站下载后 ( http:/ ),这种质疑的声音越来越大。麒麟除内核以外的应 用大部分都来自自由组织 GNU 的代码,这些代码并不属于“中国独立研发”,而且他们的版 权也不属于

5、麒麟操作系统的开发者。更有甚者,有人开始通过反汇编麒麟操作系统内核发现 和美国的FreeBSD开放源代码操作系统非常相似。随后又有人成功的用FreeBSD的内核启动 了麒麟操作系统。按照麒麟官方的介绍,麒麟具有Linux的二进制兼容的能力,可是丝毫没 有提及与FreeBSD的兼容性,使得麒麟内核与FreeBSD的关系变得比较引人注目。在官方介 绍中的简简单单的“参考”是无法解释这种相似程度的。在强烈的关注声中,麒麟开发人员在2006年2月16日,给出了一个说明,关于银河麒麟 操作系统的说明3,发布在http:/ 5.0具有比Unix SVR4.2更好的发 展势头,特别是 SMPng 项目的开展

6、,为 FreeBSD 5.0 支持 SMP 对称多处理器系统奠定了良 好的基础,因此银河麒麟操作系统的系统服务层从SVR4.2升级到当时正在研发中的FreeBSD 5.0。 ”声明发出后一定程度上得到了大家谅解,可是虽然提及和 FreeBSD 的关系,却又十分隐晦, 既没有明确的对官方网站新闻中的报道失实承认错误,没有明确阐述麒麟的操作系统是否具 有“完全知识产权”以及是否是“中国独立研发”,甚至也没有对官方页面上的事实报道进行修 正。而且,既然说明使用了 FreeBSD 5.0的代码,却又说仅限于系统服务层,而丝毫未提及 所占比例。这依旧让人们对这个获得 863计划软件重大专项的资助的操作系

7、统到底有多少创 新产生一个大大的疑问。为了调查清楚麒麟操作系统内核自主创新的百分比,以及与其它操作系统之间的关系,我将 麒麟操作系统内核与FreeBSD、NetBSD、OpenBSD、Linux和Solaris的内核进行了可执行代 码的相似度分析。在整个过程中,我将尽量保持客观的原则进行分析。由于麒麟操作系统属于封闭源代码系统, 因此在无法获得内核源代码的情况下,我将只进行二进制可执行代码文件的相似度分析。由 于可执行代码受编译环境、内存分布情况以及模块的变动的影响很大,因此,会产生即使采 用同一套代码,却产生很低的相似度情况。但是,对操作系统内核这种大型软件系统来说, 却不会因为不同的代码而

8、产生很高的相似度的情况。因此,我们将这次对二进制可执行代码 分析所得的相似度作为相似度的下限。换句话说,真实的相似度应该会高于此次分析结果, 但是由于分析方法的局限性,无法取得上限。二、可执行文件的相似度比较二进制可执行文件的相似度分析一直是一个难题。大家都知道,即使是同一份源代码,使用 同一个编译器,可用不同的编译参数进行编译后,代码也会产生极大的差异。当发生有人因为盗用别人的源代码而产生的侵权后,如果不能够将二者的源代码拿出进行比 较的话,判断是否抄袭非常困难。因此,一直以来或多或少,总会有人无所顾忌的将开放源 代码的软件拿来加入到自己的软件中,或者干脆就是在那些源代码的基础上稍加修改和更

9、换 了版权信息就宣称是自己研发的。因为他们知道,只要不把自己的源代码公诸于众,那么抄 袭就很难判定。下面我就详细说一下我采用的分析方法。2.1 ELF 可执行文件相似度分析方法这次分析起始,我就碰到了一些难题。如果对二进制可执行文件进行基于字节的相似性分析, 即使匹配上某些字节,也很难说明两段代码的相似性,另外匹配也很容易受到各种噪音的干 扰而产生很低的相似度,可是噪音却无法被去除。因此,使最小比较单元具有明确的语义和合理的过滤噪音是我首先要解决的问题。2.1.1 反汇编 二进制文件的比较难以确定最小单元语义的根本问题在于二进制文件是以字节为单位,然而 每个字节却没有特定的含义。你很难说 89

10、 e5 和83 EC 89中的89相同说明什么,在这个例 子中,前者的89 e5是i386的一条指令,而后者的89则是一个立即数,所以他们相同实际 上什么都不说明。针对这次分析,由于都是可执行代码,而且都采用了 ELF的文件格式。由于这个特点,我首 先将所有操作系统的内核通过 objdump 反汇编成汇编代码。这样做有一个直接的好处,就 是每一行都是一条汇编语句,而每一条汇编语句又是一个程序不可分的最小逻辑单元。这样, 接下来的分析就可以基于行来进行相似性的分析,因为每出现一行相同就说明有一个最小的 逻辑单元相同,如果出现连续的行相似,那么就说明有连续的代码段相似。相同的行越多两 个内核就越相

11、似。并且经过反汇编后,就避免了因文件内包含的其他无关信息,如字符串、资源文件、数据文 件等,对分析结果产生的影响。这个方法依旧无法避免因编译参数差异所造成的相似度下降的影响。虽然如此,但是我很幸 运,从这次分析的结果看,依旧得到了不低的相似度。2.1.2 过滤噪音噪音的出现有很多原因,可能是内存分布不同、代码的增删导致的偏移地址的变化,对相同 含义的常量而数值却不同等等。这些值的差异,可能会造成不同的执行结果,但是却对两段 代码的相似性比较影响不大。请看下列两个代码段:c043e9e8 : freebsd4_sigcode(): c043e9e8: call*0x10(%esp)c043e9e

12、c: lea0x14(%esp),%eaxc043e9f0: push %eax c043e9f1: testl $0x20000,0x54(%eax) c043e9f8:jne| c04431d8 :freebsd4_sigcode():| c04431d8: call| c04431dc: lea| c04431e0:push*0x10(%esp) 0x14(%esp),%eax %eax| c04431e1: testl $0x20000,0x54(%eax)C043e9fd c04431e8:jneC04431edc043e9fa: movl c043e9fd: mov c043ea0

13、2:push c043ea03: int c043ea05: jmp0x14(%eax),%gs$0x158,%eax%eax$0x80| c04431ea: movw| c04431ed: mov| c04431f2: push %eax| c04431f3: int $0x80|0x14(%eax),%gs$0x158,%eaxjmpC043ea05C04431f5c04431f5:| c04431f7: nopc043ea07: nop左边的代码是来自FreeBSD 5.3内核的,而右边的代码来自麒麟2.0.21/18的内核。通过人的 分析,我们可以得出这两段代码实际上是相同的。可是对于

14、计算机程序比较的时候,就不尽 然。请注意上述的有颜色的数字。用蓝色表示的代码地址4、绿色表示的偏移地址、红色表示的立即数、深蓝色表示的函数偏移地址和粉色表示的函数地址,这些数字的不同,就造成了代 码比较时候的失败。上述 13行代码,如果就这样比较的话,只有函数名一行可以匹配。因 此虽然是相同的代码,却只有 7.7%的相似度。下面我们就来去除这些干扰。首先,我们将代码行地址、函数跳转地址和函数偏移地址去除。代码行所在的地址,实际上 是说明了代码所在内存的位置,内存的位置会随着代码的删改而很容易产生变动,这些对我 们比较代码逻辑没有意义。其中有些绝对地址,我们将其替换为Address”,这样既不受地 址变化的影响,又不至影响了代码的含义。然后我们将绿色的偏移地址替换成特定字符串Offset”。产生偏移地址的原因一般有两种, 一种是结构体,另一种是数组。即使不对结构体删改,而仅仅是对结构体的声明顺序的变动 都可以造成偏移地址的不同,我们在这里只关心程序在这里用到了一个偏移地址,而不关心 用的到底是偏移了多少。数组的用法虽然不常出现,但是即使出现其中的位置也是很容易发 生变动的。因此在这里,我们也将偏移地址的数值

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号