首页
社区
课程
招聘
[求助]一段反汇编有点没看懂
发表于: 2014-7-22 10:34 3613

[求助]一段反汇编有点没看懂

2014-7-22 10:34
3613
int myfunction(int a[3][3],int b[3][3],int c[3][3])

{  

int i,j;  

for(i=0;i<3;i++)  

00401000  mov         eax,dword

ptr

[esp+4]  

;a

保存到

eax



00401004  mov         edx,dword

ptr

[esp+0Ch]  

  

;c

保存到

edx



00401008  mov         ecx,dword

ptr

[esp+8]  

;b

保存到

ecx

中。

0040100C  push        ebx   

0040100D  push        esi   

0040100E  add         eax,4        (这里是问题,为什么要eax+4?以及下面的edx+8?)

;

这里已经开始处理数据。必须把这些指令和

;

函数入口指令和循环控制指令分开

00401011  push        edi   

  

00401012  add         edx,8   

;

同前面的

add eax,4

00401015  mov         esi,3  

  

;

循环变量取

3

0040101A  lea         ebx,[ebx]  

  

  

  

  

;

无意义指令

{  

for(j=0;j<3;j++)  

c[i][j] = a[i][0]*b[0][j]+a[i][1]*b[1][j]+a[i][2]*b[2][j];  

00401020  mov         ebx,dword

ptr

[eax]   

  

;

显然从这里开始

,

是数值计算过程。代码的优化,使内部

00401022  imul        ebx,dword

ptr

[ecx+0Ch]  

;

循环不见了。可以数一下

imul

指令,刚好九次。可以说明

  

00401026  mov         edi,dword

ptr

[ecx+18h]  

  

;

这里用一个单循环完成了原来双循环的工作。

  

00401029  imul        edi,dword

ptr

[eax+4]  

0040102D  add         edi,ebx   

0040102F  mov         ebx,dword

ptr

[eax-4]  

00401032  imul        ebx,dword

ptr

[ecx]  

00401035  add         edi,ebx   

00401037  mov         dword

ptr

[edx-8],edi  

0040103A  mov         ebx,dword

ptr

[eax]  

0040103C  imul        ebx,dword

ptr

[ecx+10h]  

00401040  mov         edi,dword

ptr

[ecx+1Ch]  

00401043  imul        edi,dword

ptr

[eax+4]  

00401047  add         edi,ebx   

00401049  mov         ebx,dword

ptr

[eax-4]  

0040104C  imul        ebx,dword

ptr

[ecx+4]  

00401050  add         edi,ebx   

00401052  mov         dword

ptr

[edx-4],edi  

00401055  mov         ebx,dword

ptr

[eax+4]  

00401058  imul        ebx,dword

ptr

[ecx+20h]  

0040105C  mov         edi,dword

ptr

[ecx+14h]  

0040105F  imul        edi,dword

ptr

[eax]  

00401062  add         edi,ebx   

00401064  mov         ebx,dword

ptr

[eax-4]  

00401067  imul        ebx,dword

ptr

[ecx+8]  

0040106B  add         edi,ebx   

0040106D  mov         dword

ptr

[edx],edi  

0040106F  add         eax,0Ch  

00401072  add         edx,0Ch  

00401075  dec         esi   

  

  

  

  

  

;

这里开始两条,是循环指令

  

00401076  jne         myfunction+20h

(401020h)   

00401078  pop         edi   

00401079  pop         esi   

}

return 0;  

0040107A  xor         eax,eax  

0040107C  pop         ebx   

}  
复制过来的,效果不大好,问题在代码中用括号写出来了,xiexiedajia

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 16
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
哇靠,我知道效果不好,也没想到能不好成这样,简单的说,就是《天书夜读》第三章那个矩阵反汇编后的release版本
2014-7-22 10:36
0
雪    币: 16
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
已经看懂了,谢谢大家
2014-7-22 10:50
0
雪    币: 1555
活跃值: (3103)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
4
你这个代码 ,排下版吧
2014-7-22 11:48
0
游客
登录 | 注册 方可回帖
返回
//