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

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

 2007-09-29 12:32:20 来源:WEB开发网   
核心提示: 至此,上述代码将会变为:<freebsd4_sigcode>: | <freebsd4_sigcode>:freebsd4_sigcode():| freebsd4_sigcode():call *{Offset}(%esp)| call *{Offset}(%e

至此,上述代码将会变为:

<freebsd4_sigcode>:             | <freebsd4_sigcode>:freebsd4_sigcode():            | freebsd4_sigcode():
call  *{Offset}(%esp)         |  call  *{Offset}(%esp)
lea  {Offset}(%esp),%eax        |  lea  {Offset}(%esp),%eax
push  %eax               |  push  %eax
testl{Number},{Offset}(%eax)      |  testl{Number},{Offset}(%eax)
jne  <freebsd4_sigcode+{Offset}>    |  jne  <freebsd4_sigcode+{Offset}>
movl  {Offset}(%eax),%gs        |  movw  {Offset}(%eax),%gs
mov  {Number},%eax           |  mov  {Number},%eax
push  %eax               | push  %eax
int  {Number}             |  int  {Number}
jmp  <freebsd4_sigcode+{Offset}>    |  jmp  <freebsd4_sigcode+{Offset}>
nop                   |  nop

现在这两段代码的相似度将变成真实的100%。

2.1.3 代码段顺序调整

经过上面的噪音过滤后,代码已经能够在基本不影响代码逻辑的前提下去除了噪音的影响。可是,还有一种情况会对匹配结果带来较大的影响。就是代码块位置的前后变动,我们来看下面这两段代码的比对。

begin():                  <
    mov  {Address},%eax       <
    lea  {Offset}(%eax),%esp     <
    xor  %ebp,%ebp          <
    mov  {Address},%esi       <
    mov  %esi,{Offset}(%eax)     <
    pushl{Address}          <
    call  <init386>          <
    add  {Number},%esp        <
    call  <mi_startup>        <
    add  {Number},%esp        <
sigcode():                  sigcode():
    call  *{Offset}(%esp)            call  *{Offset}(%esp)
    lea  {Offset}(%esp),%eax          lea  {Offset}(%esp),%eax
    push  %eax                 push  %eax
    testl{Number},{Offset}(%eax)        testl{Number},{Offset}(%eax)
    jne  <sigcode+{Offset}>           jne  <sigcode+{Offset}>
    movl  {Offset}(%eax),%gs     |     movw  {Offset}(%eax),%gs
    mov  {Number},%eax             mov  {Number},%eax
    push  %eax                 push  %eax
    int  {Number}               int  {Number}
    jmp  <sigcode+{Offset}>           jmp  <sigcode+{Offset}>
    nop                     nop  
                      > begin():
                     >     mov  {Address},%eax
                      >     lea  {Offset}(%eax),%esp
                      >     xor  %ebp,%ebp
                      >     mov  {Address},%esi
                      >     mov  %esi,{Offset}(%eax)
                      >     pushl{Address}
                      >     call  <init386>
                     >     add  {Number},%esp
                      >     call  <mi_startup>
                      >     add  {Number},%esp

上一页  1 2 3 4 5 

Tags:麒麟 操作系统 内核

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