|
本帖最后由 gmh5225 于 2014-12-26 00:57 编辑
写这个纯属就是自己记录下自己的学习经历,没有其他的意思。
详细命令请百度谷歌 8086汇编指令
跳转以及switch
C源代码:
- int main()
- {
- int a=5,b=6;
- if (a==b)
- {
- ++a;
- }
- else
- ++b;
-
- system("pause");
- return 0;
- }
复制代码 OD反汇编:
- 008D1000 > 55 push ebp
- 008D1001 8BEC mov ebp, esp
- 008D1003 83EC 08 sub esp, 0x8
- 008D1006 C745 FC 0500000>mov dword ptr [ebp-0x4], 0x5
- 008D100D C745 F8 0600000>mov dword ptr [ebp-0x8], 0x6
- 008D1014 8B45 FC mov eax, dword ptr [ebp-0x4] ; eax=a
- 008D1017 3B45 F8 cmp eax, dword ptr [ebp-0x8] ; if (a==b)
- 008D101A 75 0B jnz short testtest.008D1027 ; 如果不相等,ZF置0,跳
- 008D101C 8B4D FC mov ecx, dword ptr [ebp-0x4] ; ecx=a
- 008D101F 83C1 01 add ecx, 0x1 ; ecx++
- 008D1022 894D FC mov dword ptr [ebp-0x4], ecx ; a=ecx
- 008D1025 EB 09 jmp short testtest.008D1030
- 008D1027 8B55 F8 mov edx, dword ptr [ebp-0x8]
- 008D102A 83C2 01 add edx, 0x1
- 008D102D 8955 F8 mov dword ptr [ebp-0x8], edx
- 008D1030 68 F4208D00 push testtest.008D20F4 ; ASCII "pause"
- 008D1035 > FF15 A0208D00 call dword ptr [<&MSVCR100.system>] ; msvcr100.system
- 008D103B 83C4 04 add esp, 0x4
- 008D103E 33C0 xor eax, eax
- 008D1040 > 8BE5 mov esp, ebp
- 008D1042 5D pop ebp
- 008D1043 > C3 retn ; 开辟12个字节空间供3个变量
复制代码
下面讲switch 其实就是多个if else的判断
C源代码:
- int main()
- {
- int a=5;
- switch (a)
- {
- case 1:
- a=1;
- break;
- case 2:
- a=2;
- break;
- case 3:
- a=3;
- break;
- default:
- a=0;
- break;
- }
- system("pause");
- return 0;
- }
复制代码 OD反汇编:
- 012E1000 > 55 push ebp
- 012E1001 8BEC mov ebp, esp
- 012E1003 83EC 08 sub esp, 0x8
- 012E1006 C745 FC 0500000>mov dword ptr [ebp-0x4], 0x5 ; int a=5
- 012E100D 8B45 FC mov eax, dword ptr [ebp-0x4] ; eax=a
- 012E1010 > 8945 F8 mov dword ptr [ebp-0x8], eax ; b=eax
- 012E1013 837D F8 01 cmp dword ptr [ebp-0x8], 0x1 ; if (b==1)
- 012E1017 74 0E je short testtest.012E1027 ; 如果相等,ZF置1,跳转
- 012E1019 837D F8 02 cmp dword ptr [ebp-0x8], 0x2
- 012E101D 74 11 je short testtest.012E1030 ; 同上,相等跳转
- 012E101F 837D F8 03 cmp dword ptr [ebp-0x8], 0x3
- 012E1023 74 14 je short testtest.012E1039 ; 相等跳转
- 012E1025 EB 1B jmp short testtest.012E1042 ; 全部都不等,就是default
- 012E1027 C745 FC 0100000>mov dword ptr [ebp-0x4], 0x1 ; a=1
- 012E102E EB 19 jmp short testtest.012E1049
- 012E1030 C745 FC 0200000>mov dword ptr [ebp-0x4], 0x2 ; a=2
- 012E1037 EB 10 jmp short testtest.012E1049
- 012E1039 C745 FC 0300000>mov dword ptr [ebp-0x4], 0x3 ; a=3
- 012E1040 > EB 07 jmp short testtest.012E1049
- 012E1042 C745 FC 0000000>mov dword ptr [ebp-0x4], 0x0 ; a=0
- 012E1049 68 F4202E01 push testtest.012E20F4 ; ASCII "pause"
- 012E104E FF15 A0202E01 call dword ptr [<&MSVCR100.system>] ; msvcr100.system
- 012E1054 83C4 04 add esp, 0x4
- 012E1057 33C0 xor eax, eax
- 012E1059 8BE5 mov esp, ebp
- 012E105B 5D pop ebp
- 012E105C > C3 retn ; a[i]=edx=i+1
复制代码 如果switch分支过多,就会出现如下代码:
- 00361000 > 55 push ebp
- 00361001 8BEC mov ebp, esp
- 00361003 83EC 08 sub esp, 0x8
- 00361006 C745 FC 0500000>mov dword ptr [ebp-0x4], 0x5 ; int a=5
- 0036100D 8B45 FC mov eax, dword ptr [ebp-0x4] ; eax=a
- 00361010 8945 F8 mov dword ptr [ebp-0x8], eax ; b=eax
- 00361013 8B4D F8 mov ecx, dword ptr [ebp-0x8] ; ecx=b
- 00361016 83E9 01 sub ecx, 0x1 ; ecx=ecx-1
- 00361019 894D F8 mov dword ptr [ebp-0x8], ecx ; b=ecx
- 0036101C 837D F8 06 cmp dword ptr [ebp-0x8], 0x6 ; a-1与6比较
- 00361020 77 49 ja short testtest.0036106B ; a-1>6 也就是a>7 也就是default,则跳default
- 00361022 8B55 F8 mov edx, dword ptr [ebp-0x8] ; d=b=a-1
- 00361025 FF2495 88103600 jmp dword ptr [edx*4+0x361088] ; 利用edx的数值 动态跳转
- 0036102C C745 FC 0100000>mov dword ptr [ebp-0x4], 0x1
- 00361033 EB 3D jmp short testtest.00361072
- 00361035 C745 FC 0200000>mov dword ptr [ebp-0x4], 0x2
- 0036103C EB 34 jmp short testtest.00361072
- 0036103E C745 FC 0300000>mov dword ptr [ebp-0x4], 0x3
- 00361045 EB 2B jmp short testtest.00361072
- 00361047 C745 FC 0400000>mov dword ptr [ebp-0x4], 0x4
- 0036104E EB 22 jmp short testtest.00361072
- 00361050 C745 FC 0500000>mov dword ptr [ebp-0x4], 0x5
- 00361057 EB 19 jmp short testtest.00361072
- 00361059 C745 FC 0600000>mov dword ptr [ebp-0x4], 0x6
- 00361060 EB 10 jmp short testtest.00361072
- 00361062 C745 FC 0700000>mov dword ptr [ebp-0x4], 0x7
- 00361069 EB 07 jmp short testtest.00361072
- 0036106B C745 FC 0000000>mov dword ptr [ebp-0x4], 0x0
- 00361072 68 F4203600 push testtest.003620F4 ; ASCII "pause"
- 00361077 FF15 A0203600 call dword ptr [<&MSVCR100.system>] ; msvcr100.system
- 0036107D 83C4 04 add esp, 0x4
- 00361080 33C0 xor eax, eax
- 00361082 8BE5 mov esp, ebp
- 00361084 5D pop ebp
- 00361085 C3 retn
复制代码 上面的代码有没有很熟悉的感觉,对于经常逆向软件的人来说是这样的。。。
太过于简单就不分析了
跳转到此结束!
|
评分
-
参与人数 29 | HB +54 |
THX +20 |
收起
理由
|
猫妖的故事
| + 1 |
|
|
花盗睡鼠
| + 2 |
+ 1 |
[吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守! |
24567
| + 2 |
|
|
对影成三人
| + 1 |
|
[吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意! |
虚心学习
| + 1 |
|
[吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩! |
一路走来不容易
| |
+ 1 |
|
Soul1999
| + 1 |
|
|
temp
| + 1 |
|
|
冷亦飞
| |
+ 1 |
|
消逝的过去
| + 2 |
|
|
yexing
| + 1 |
|
|
liugu0hai
| + 1 |
+ 1 |
[吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩! |
jaunic
| |
+ 1 |
|
hnymsh
| |
+ 1 |
|
lies
| + 1 |
|
|
轻轻不语
| + 3 |
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品! |
geekcat
| + 1 |
+ 1 |
论坛有你更精彩!感谢楼主! |
雾里看花
| + 1 |
+ 1 |
★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!! |
EZ
| + 1 |
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品! |
逍遥枷锁
| + 2 |
+ 1 |
★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!! |
Scar-疤痕
| + 6 |
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品! |
阿菜
| + 2 |
+ 1 |
最后一段那种.都不知道怎么办..T_T |
520Kelly
| + 2 |
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品!!. |
Top丶邪少
| + 5 |
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品! |
Shark恒
| + 6 |
+ 1 |
★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!! |
雨季
| + 3 |
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品!!. |
Desire
| + 3 |
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品! |
Mrsin
| + 2 |
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品!!. |
Camille
| + 3 |
+ 1 |
★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!! |
查看全部评分
|