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

ASP.NET
asp.net GridView控件中模板列CheckBox全选、反选、取消
asp.net GridView 删除时弹出确认对话框(包括内容提示)
asp.net DropDownList 三级联动下拉菜单实现代码
asp DataTable添加列和行的三种方法
Asp.net 页面调用javascript变量的值
asp.net 长文章通过设定的行数分页
asp.net 定时间点执行任务的简易解决办法
asp.net 页面延时五秒,跳转到另外的页面
asp.net 动态输出透明gif图片
asp.net DataList与Repeater用法区别
asp.net Javascript获取CheckBoxList的value
asp.net程序在调式和发布之间图片路径问题的解决方法
asp.net下生成英文字符数字验证码的代码
asp.net 页面版文本框智能提示JSCode (升级版)
ASP.NET URL伪静态重写实现方法
ASP.NET 2.0 中Forms安全认证
asp.net 动态添加多个用户控件
asp.net Repeater显示父子表数据,无闪烁
asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
asp.net GridView排序简单实现

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 71 ::
收藏到网摘: 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:本人汇编水平不高,如果有错误的地方欢迎指出斧正。