天书夜读【汇编反C语言】

来源:互联网 发布:程序员加班猝死 编辑:程序博客网 时间:2024/06/10 07:26

感觉作者分析有误!以下是我的分析:

void XXX(a,int b[2][2],int c[2][2],int d[3])

{

 

ebx = a ;// dword ptr [esp+4]

edx = b ;// dword ptr [esp+8]

ecx = c ; // dword ptr [esp+10h]

esi = d ;// dword ptr [esp+14h]

{

00401000  push        ecx         

00401001  mov         ecx,dword ptr [esp+10h]    

00401005  mov         edx,dword ptr [esp+8]      

00401009  push        ebx         

0040100A  mov         ebx,dword ptr [esp+4]     

0040100E  push        esi         

0040100  mov         esi,dword ptr [esp+14h]   

00401013  push        ebp         

}

int i = 0 ; //eax

{

    00401014  xor         eax,eax                   

    00401016  push        edi         

    00401017  jmp         myunction+20h (401020h)                 

    00401019  lea         esp,[esp]

}

int k = 0 ;     

do

{

    c[k][0] = d[2]*b[i][1] + d[0]*b[i][0] ;

    {

    00401020  mov         edi,dword ptr [esi+8]              

    00401023  imul        edi,dword ptr [edx+eax*8+4]        

    00401028  mov         ebp,dword ptr [esi]              

    0040102A  imul        ebp,dword ptr [edx+eax*8]          

    0040102E  add         edi,ebp                            

    00401030  mov         dword ptr [ecx],edi                 

    }

   

    ebx = c[k][0] + d[0]*b[i][1] + d[1]*b[i][0] ;

    {

    00401032  mov         edi,dword ptr [esi+0h]    

    00401035  imul        edi,dword ptr [edx+eax*8+4]        

    0040103A  mov         ebp,dword ptr [esi+4]    

    0040103  imul        ebp,dword ptr [edx+eax*8]          

    00401041  add         edi,ebp                             

   

    00401043  mov         ebp,dword ptr [ecx]              

    00401045  add         ebp,edi                             

    00401047  add         ebx,ebp 

    }

   

    c[k][1] = d[0]*b[i][1] +  d[1]*b[i][0] ;

    {

    00401049  mov         dword ptr [ecx+4],edi

    }  

 

    i++ ;

    k++ ;

    {

    0040104  inc         eax                                   

    0040104  add         ecx,8  

    }

   

    00401050  cmp         eax,2                            

    00401053  jl          myunction+20h (401020h)   

}while(i<2)

 

ebx = ebx +rand();

{

    00401055  call        rand (401138h)      

    0040105A  add         ebx,eax       

}

switch(ebx)

{

    case: 64h

    {

        printf("cnt is 100") ;

    }

    case: 6Eh

    {

        printf("cnt is 110") ;

        break ;

    }

    deault:

    {

        printf("“nothing”") ;  

    }                 

}

return ebx ;             

}

原创粉丝点击