简单反汇编之狐狸吃兔子算法
2010-01-11 14:56
176 查看
今天拿狐狸吃兔子算法反了一下,特此坐下记录,算法源码:
http://blog.csdn.net/ms2146/archive/2009/12/25/5073360.aspx
Release版本反汇编分析:
over.................
http://blog.csdn.net/ms2146/archive/2009/12/25/5073360.aspx
Release版本反汇编分析:
00401000 /$ 83EC 2C SUB ESP,2C //开辟了11个堆栈空间 00401003 |. 33C0 XOR EAX,EAX 00401005 |. 56 PUSH ESI 00401006 |. 57 PUSH EDI 00401007 |. 894424 08 MOV DWORD PTR SS:[ESP+8],EAX 0040100B |. 894424 0C MOV DWORD PTR SS:[ESP+C],EAX 0040100F |. 894424 10 MOV DWORD PTR SS:[ESP+10],EAX 00401013 |. 894424 14 MOV DWORD PTR SS:[ESP+14],EAX 00401017 |. 894424 18 MOV DWORD PTR SS:[ESP+18],EAX 0040101B |. 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX 0040101F |. 894424 20 MOV DWORD PTR SS:[ESP+20],EAX 00401023 |. 894424 24 MOV DWORD PTR SS:[ESP+24],EAX 00401027 |. 894424 28 MOV DWORD PTR SS:[ESP+28],EAX 0040102B |. 894424 2C MOV DWORD PTR SS:[ESP+2C],EAX 0040102F |. 894424 30 MOV DWORD PTR SS:[ESP+30],EAX //给前面开辟的11个堆栈空间赋值为eax=0; 00401033 |. 33C9 XOR ECX,ECX //ecx清零 00401035 |. BE E8030000 MOV ESI,3E8 //esi赋值1000 0040103A |> 41 /INC ECX //ecx自增1 0040103B |. 03C1 |ADD EAX,ECX //eax=eax+ecx 0040103D |. 83F8 0A |CMP EAX,0A //eax和10比较 00401040 |. 7E 0A |JLE SHORT sftest.0040104C //小于等于跳转到sftest.0040104C 00401042 |. 99 |CDQ //将edx至eax的符号位相同 00401043 |. BF 0A000000 |MOV EDI,0A //edi赋值10 00401048 |. F7FF |IDIV EDI //eax/10 0040104A |. 8BC2 |MOV EAX,EDX //取余给eax 0040104C |> 8B7C84 08 |MOV EDI,DWORD PTR SS:[ESP+EAX*4+8] //获取ESP+EAX*4+8可以看出每次改变的是eax,这里的eax是索引,后面乘4是因为以4字节为单位,加8是因为上面分配的数组是从esp+8开始的 00401050 |. 47 |INC EDI //edi自增1 00401051 |. 4E |DEC ESI //循环变量esi总共循环1000次,这里是减一 00401052 |. 897C84 08 |MOV DWORD PTR SS:[ESP+EAX*4+8],EDI //将计算好的edi在重复放入eax索引处的堆栈 00401056 |.^ 75 E2 /JNZ SHORT sftest.0040103A //跳转上去继续循环 00401058 |. 8D7424 0C LEA ESI,DWORD PTR SS:[ESP+C] //取数组第一个元素偏移 0040105C |. BF 0A000000 MOV EDI,0A 00401061 |> 8B06 /MOV EAX,DWORD PTR DS:[ESI] //获取数组数据 00401063 |. 50 |PUSH EAX 00401064 |. 68 30704000 |PUSH sftest.00407030 ; ASCII "%d/n" 00401069 |. E8 22000000 |CALL sftest.00401090 0040106E |. 83C4 08 |ADD ESP,8 00401071 |. 83C6 04 |ADD ESI,4 00401074 |. 4F |DEC EDI 00401075 |.^ 75 EA /JNZ SHORT sftest.00401061 00401077 |. 5F POP EDI 00401078 |. 5E POP ESI 00401079 |. 83C4 2C ADD ESP,2C //清理堆栈 0040107C /. C3 RETN
over.................
相关文章推荐
- 从简单的算法初探过程汇编
- 狐狸吃兔子问题算法
- 从简单的算法初探过程汇编 栈帧指针 .
- 算法:狐狸吃兔子问题(约瑟环)
- 从简单的算法初探过程汇编
- Fibonacci的【兔子数列】 以及 【狐狸找兔子】的问题 及 算法!
- 简单反汇编之还原(谁是窃贼算法)C++代码
- 【经典算法】:狐狸抓兔子问题
- 从简单的算法初探过程汇编 栈帧指针
- 从简单的算法初探过程汇编
- 菜鸟学算法--简单的交换和最大公约数算法入门篇
- [转]简单算法---主页浏览工具GreenBrowser算法分析!
- 入门级算法——最大公约数 最小公倍数 快速幂 简单并查集 排列组合
- Problem 2013 A short problem-初入算法 补题 简单的dp
- 凸优化收缩算法的简单统一与应用
- 字符串简单模式匹配算法与IndexOf方法比较
- 初学算法 简单的小例子
- 简单算法之冒泡排序(Java)
- 几何算法:点集合构造简单多边形
- 简单算法--一个整形数逆序输出后正序输出/一段精彩的递归代码