当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 一个简单程序的反编译

ASP.NET
使用函数传递参数来执行相应的数据库操作
如何实现在窗体和窗体之间进行传递数据
ASP.NET中文显示之两种解决方法
ASP.NET、JSP及PHP之间的抉择
ASP.NET 2.0发送电子邮件中存在的问题
谈谈HtmlControl与WebControl的区别与用途
从ASP.NET 1.1升级到ASP.NET 2.0要考虑的Cookie问题
通过系统配置来提高ASP.NET应用程序的稳定性
妙用ASP2.0中的URL映射改变网址
AJAX实现web页面中级联菜单的设计
ASP.NET跨页面传值技巧总结
再议ASP.NET DataGrid控件中的“添加新行”功能
Geometry 对象浅析
重构CollapsibleSplitter
如何利用.NET Framework使用RSS feed
ASP.NET获取IP与MAC地址的方法
在ASP.NET 2.0中使用样式、主题和皮肤
ASP.NET中为GridView添加删除提示框
ASP.NET 2.0,无刷新页面新境界
看看一个.net版对话框控件

ASP.NET 中的 一个简单程序的反编译


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 69 ::
收藏到网摘: n/a

同样,初始化数组,只不过是改用了寄存器初始化,同样在初始化完成后压入数组的首地址

以下为引用的内容:

01391000 /$ 83EC 08 sub esp, 8
01391003 . 53 push ebx
01391004 . 55 push ebp
01391005 . 56 push esi
01391006 . 57 push edi
01391007 . 83C0 0C add eax, 0C;将数组b地址+12,挪到b[1][0]的位置
0139100A . 8BFA mov edi, edx
0139100C . 894424 14 mov dword ptr [esp+14], eax;将b[1][0]位置记录下来
01391010 . 8BD9 mov ebx, ecx
01391012 . 83C7 04 add edi, 4;数组a挪到a[0][1]的位置
01391015 . C74424 10 030>mov dword ptr [esp+10], 3记录i
0139101D . 8D49 00 lea ecx, dword ptr [ecx];??
01391020 > 8B7424 14 /mov esi, dword ptr [esp+14]
01391024 . BD 03000000 mov ebp, 3;记录j
01391029 . 8DA424 000000>lea esp, dword ptr [esp]
01391030 > 8B4E F4 /mov ecx, dword ptr [esi-C];取b[0][j]
01391033 . 8B56 0C mov edx, dword ptr [esi+C];取b[2][j]
01391036 . 0FAF4F FC imul ecx, dword ptr [edi-4];取a[i][0],第1段乘法
0139103A . 0FAF57 04 imul edx, dword ptr [edi+4];取a[i][2],第3段乘法
0139103E . 8B06 mov eax, dword ptr [esi];取b[1][j]
01391040 . 0FAF07 imul eax, dword ptr [edi];取a[i][1],第2段乘法
01391043 . 03CA add ecx, edx
01391045 . 03C1 add eax, ecx;结果放在eax中
01391047 . 50 push eax ; /<%d>
01391048 . 68 F4203901 push 013920F4 ; format = "%d "
0139104D . 8903 mov dword ptr [ebx], eax ; 写入到c[i][j]中
0139104F . FF15 A0203901 call dword ptr [<&MSVCR90.printf>] ; \printf
01391055 . 83C4 08 add esp, 8
01391058 . 83C6 04 add esi, 4;j++
0139105B . 83C3 04 add ebx, 4;挪到c[i][j+1]
0139105E . 83ED 01 sub ebp, 1;j<3
01391061 .^ 75 CD \jnz short 01391030
01391063 . 83C7 0C add edi, 0C;i++
01391066 . 836C24 10 01 sub dword ptr [esp+10], 1;i<3
0139106B .^ 75 B3 \jnz short 01391020
0139106D . 5F pop edi
0139106E . 5E pop esi
0139106F . 5D pop ebp
01391070 . 33C0 xor eax, eax
01391072 . 5B pop ebx
01391073 . 83C4 08 add esp, 8
01391076 \. C3 retn

最后是MININIZE SIZE模式:

这个模式下直接合并(还是 应该叫内联)了main和myFunction子函数。

以下为引用的内容:

00ED1000 /$ 55 push ebp
00ED1001 . 8BEC mov ebp, esp
00ED1003 . 83EC 7C sub esp, 7C
00ED1006 . 53 push ebx
00ED1007 . 56 push esi
00ED1008 . 57 push edi
00ED1009 . 6A 02 push 2
00ED100B . 58 pop eax
00ED100C . 33C9 xor ecx, ecx
00ED100E . 41 inc ecx
00ED100F . 6A 03 push 3
00ED1011 . 5E pop esi ; j<3
00ED1012 . 894D A8 mov dword ptr [ebp-58], ecx
00ED1015 . 894D AC mov dword ptr [ebp-54], ecx
00ED1018 . 894D B0 mov dword ptr [ebp-50], ecx
00ED101B . 894D E4 mov dword ptr [ebp-1C], ecx
00ED101E . 894D E8 mov dword ptr [ebp-18], ecx
00ED1021 . 894D EC mov dword ptr [ebp-14], ecx
00ED1024 . 33C9 xor ecx, ecx
00ED1026 . 8945 B4 mov dword ptr [ebp-4C], eax
00ED1029 . 8945 B8 mov dword ptr [ebp-48], eax
00ED102C . 8945 BC mov dword ptr [ebp-44], eax
00ED102F . 8975 C0 mov dword ptr [ebp-40], esi
00ED1032 . 8975 C4 mov dword ptr [ebp-3C], esi
00ED1035 . 8975 C8 mov dword ptr [ebp-38], esi
00ED1038 . 8975 CC mov dword ptr [ebp-34], esi
00ED103B . 8975 D0 mov dword ptr [ebp-30], esi
00ED103E . 8975 D4 mov dword ptr [ebp-2C], esi
00ED1041 . 8945 D8 mov dword ptr [ebp-28], eax
00ED1044 . 8945 DC mov dword ptr [ebp-24], eax
00ED1047 . 8945 E0 mov dword ptr [ebp-20], eax
00ED104A . 894D FC mov dword ptr [ebp-4], ecx ; i=0
00ED104D . EB 03 jmp short 00ED1052
00ED104F > 8B4D FC /mov ecx, dword ptr [ebp-4]
00ED1052 > 8D440D AC lea eax, dword ptr [ebp+ecx-54; a[i][1]的地址
00ED1056 . 8B50 04 mov edx, dword ptr [eax+4; a[i][2]
00ED1059 . 8955 F4 mov dword ptr [ebp-C], edx ; a[i][2]=>[ebp-C]
00ED105C . 8B10 mov edx, dword ptr [eax] ; a[i][1]
00ED105E . 8B40 FC mov eax, dword ptr [eax-4; a[i][0]
00ED1061 . 33DB xor ebx, ebx ; j=0
00ED1063 . 8955 F0 mov dword ptr [ebp-10], edx ; a[i][1]=>[ebp-10]
00ED1066 . 8945 F8 mov dword ptr [ebp-8], eax ; a[i][0]=>[ebp-8]
00ED1069 . 8D7C0D 84 lea edi, dword ptr [ebp+ecx-7C]
00ED106D > 8B449D CC /mov eax, dword ptr [ebp+ebx*4-34; b[0][j]
00ED1071 . 0FAF45 F8 imul eax, dword ptr [ebp-8; a[i][0]*b[0][j]
00ED1075 . 8B4C9D E4 mov ecx, dword ptr [ebp+ebx*4-1C] ; b[2][j]
00ED1079 . 0FAF4D F4 imul ecx, dword ptr [ebp-C] ; a[i][2]*b[2][j]
00ED107D . 03C1 add eax, ecx
00ED107F . 8B4C9D D8 mov ecx, dword ptr [ebp+ebx*4-28; b[1][j]
00ED1083 . 0FAF4D F0 imul ecx, dword ptr [ebp-10; a[i][1]*b[1][j]
00ED1087 . 03C1 add eax, ecx ; 最后结果
00ED1089 . 50 push eax ; /<%d>
00ED108A . 68 F420ED00 push 00ED20F4 ; format = "%d "
00ED108F . FF15 A020ED00 call dword ptr [<&MSVCR90.printf>] ; \printf
00ED1095 . 43 inc ebx ; j++
00ED1096 . 59 pop ecx
00ED1097 . 83C7 04 add edi, 4
00ED109A . 3BDE cmp ebx, esi
00ED109C . 59 pop ecx
00ED109D .^ 7C CE \jl short 00ED106D
00ED109F . 8345 FC 0C add dword ptr [ebp-4], 0C ; i++
00ED10A3 . 837D FC 24 cmp dword ptr [ebp-4], 24 ; i<3
00ED10A7 .^ 7C A6 \jl short 00ED104F
00ED10A9 . 5F pop edi
00ED10AA . 5E pop esi
00ED10AB . 33C0 xor eax, eax
00ED10AD . 5B pop ebx
00ED10AE . C9 leave
00ED10AF \. C3 retn

后记:未优化模式就是原生代码,其调式期间可以和源代码一 一对应,maxspeed模式则尽可能将操作放在寄存器内完成,并且有一定的算法优化;而最小代码模式则通过合并部分代码,尽可能的通过EBP比例变址寻址,完成对二维数组的访问。

PS:本人汇编水平不高,如果有错误的地方欢迎指出斧正。