WEB开发网
开发学院操作系统windows 2008 麒麟操作系统内核同其他操作系统内核的相似性分析... 阅读

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

 2007-09-29 12:32:20 来源:WEB开发网   
核心提示: 因此,使最小比较单元具有明确的语义和合理的过滤噪音是我首先要解决的问题,麒麟操作系统内核同其他操作系统内核的相似性分析(1)(3),2.1.1 反汇编二进制文件的比较难以确定最小单元语义的根本问题在于二进制文件是以字节为单位,然而每个字节却没有特定的含义,这些值的差异,可能会造成不同的执行

因此,使最小比较单元具有明确的语义和合理的过滤噪音是我首先要解决的问题。

2.1.1 反汇编

二进制文件的比较难以确定最小单元语义的根本问题在于二进制文件是以字节为单位,然而每个字节却没有特定的含义。你很难说89 e5和83 EC 89中的89相同说明什么,在这个例子中,前者的89 e5是i386的一条指令,而后者的89则是一个立即数,所以他们相同实际上什么都不说明。

针对这次分析,由于都是可执行代码,而且都采用了ELF的文件格式。由于这个特点,我首先将所有操作系统的内核通过objdump反汇编成汇编代码。这样做有一个直接的好处,就是每一行都是一条汇编语句,而每一条汇编语句又是一个程序不可分的最小逻辑单元。这样,接下来的分析就可以基于行来进行相似性的分析,因为每出现一行相同就说明有一个最小的逻辑单元相同,如果出现连续的行相似,那么就说明有连续的代码段相似。相同的行越多两个内核就越相似。

并且经过反汇编后,就避免了因文件内包含的其他无关信息,如字符串、资源文件、数据文件等,对分析结果产生的影响。

这个方法依旧无法避免因编译参数差异所造成的相似度下降的影响。虽然如此,但是我很幸运,从这次分析的结果看,依旧得到了不低的相似度。

2.1.2 过滤噪音

噪音的出现有很多原因,可能是内存分布不同、代码的增删导致的偏移地址的变化,对相同含义的常量而数值却不同等等。这些值的差异,可能会造成不同的执行结果,但是却对两段代码的相似性比较影响不大。请看下列两个代码段:

c043e9e8 <freebsd4_sigcode>:             | c04431d8 <freebsd4_sigcode>:freebsd4_sigcode():                 freebsd4_sigcode():
c043e9e8: call  *0x10(%esp)            | c04431d8: call  *0x10(%esp)
c043e9ec: lea   0x14(%esp),%eax          | c04431dc: lea   0x14(%esp),%eax
c043e9f0: push  %eax                | c04431e0: push  %eax
c043e9f1: testl $0x20000,0x54(%eax)        | c04431e1: testl $0x20000,0x54(%eax)
c043e9f8: jne   c043e9fd <freebsd4_sigcode+0x15> | c04431e8: jne   c04431ed <freebsd4_sigcode+0x15>
c043e9fa: movl  0x14(%eax),%gs           | c04431ea: movw  0x14(%eax),%gs
c043e9fd: mov   $0x158,%eax            | c04431ed: mov   $0x158,%eax
c043ea02: push  %eax                | c04431f2: push  %eax
c043ea03: int   $0x80               | c04431f3: int   $0x80
c043ea05: jmp   c043ea05 <freebsd4_sigcode+0x1d> | c04431f5: jmp   c04431f5 <freebsd4_sigcode+0x1d>
c043ea07: nop                    | c04431f7: nop

上一页  1 2 3 4 5  下一页

Tags:麒麟 操作系统 内核

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接