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

ASP.NET
利用ASP.NET和AJAX解决手工拼接HTML问题
Asp.net关于动态输出服务器控件的应用
技巧/诀窍:在ASP.NET中重写URL
ASP.NET 自定义控件从入门到精通3
以Post方式向网页发送数据
ASP.NET实现数据采集
使用ASP.NET Image Generation生成图片缩略图及水印
ASP.NET安全问题--ASP.NET安全架构
反思软件系统与软件系统之间的集成交互问题
.Net实现程序的插件机制
作为ASP.NET开发人员必须养成的编程习惯
总结了一下ADO.NET数据库连接的相关知识
VB.NET中有用的通用对象列表
HTTP Error 503与.NET 3.5 SP1 X64
ASP.NET创建Web服务之使用事务
ASP.NET中基类Page_Load方法后执行原因分析
ASP.NET中让网页弹出窗口不再困难
改变.net网站的默认解决方案位置
.net垃圾回收和CLR 4.0对垃圾回收所做的改进之二
.net垃圾回收和CLR 4.0对垃圾回收所做的改进之一

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


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