上次我分析了一下,debug模式下反汇编后的算法部分代码,天才的您可能觉得不算糟,想再搞点花样,那么本文就能满足你的需求。天书夜读上其实还贴出来了release模式下的代码,它经过vc编译器O2的优化,我初次看到反汇编代码时,还真汗了一把。不过定下心来细细品位还是可以看懂的,尽管正如原书所说,连语句的对应顺序也已经不见了。。。
废话不多说,先贴出代码大伙“饱饱眼福”。。。
00401000 mov eax,dword ptr [esp+4]
00401004 mov edx,dword ptr [esp+0Ch]
00401008 mov ecx,dword ptr [esp+8]
0040100C push ebx
0040100D push esi
0040100E add eax,4
00401011 push edi
00401012 add edx,8
00401015 mov esi,3
0040101A lea ebx,[ebx]
00401020 mov ebx,dword ptr [eax]
00401022 imul ebx,dword ptr [ecx+0Ch]
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

本文详细分析了release模式下,经过VC编译器O2优化的C算法反汇编代码,展示了优化后的代码如何失去了语句对应顺序,但仍然可以理解。通过逐行解释汇编指令,揭示了编译器如何使用寄存器提高效率,以及如何通过优化减少变量使用。文章适合对汇编和编译器优化感兴趣的读者。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



