吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 2654|回复: 23

[转载技术] 菜鸟先飞汇编学习之路(五)——if。。else分支

  [复制链接]
Shark_鹏 发表于 2015-3-24 16:08 | 显示全部楼层 |阅读模式

if...else..
伪指令形式   .if 条件表达式
                  表达式为"真"时执行的指令            
             [.else]
                  表达式为"假"时执行的指令
             .endif


             .if 条件表达式1
                  表达式1为"真"时执行的指令
            [.elseif  条件表达式2]
                  表达式2为"真"时执行的指令
            [.elseif  条件表达式3]
                  表达式3为"真"时执行的指令
            ...
            [.else]
                   所有表达式为"假"时执行的指令
             .endif

注意:关键字if/elseif/else/endif的前面有个小数点,如果不加小数点,就变成宏汇编中的条件汇编伪操作了,结果可是天差地别。
.if   eax && (ebx >= dwX) || !(dwY != ecx)

  mov     esi,1

.elseif edx

  mov     esi,2

.elseif esi & 1

  mov     esi,3

.elseif ZERO? && CARRY?

  mov     esi,4

.endif

然后反汇编,得到了以下的汇编指令:

;          .if eax

:00401000 0BC0                  or eax, eax

:00401002 7408                  je 0040100C

;       (ebx >= dwX)

:00401004 3B1D00304000          cmp ebx, dword ptr [00403000]

:0040100A 7308                  jnb 00401014

;       (dwY != ecx)

:0040100C 390D04304000          cmp dword ptr [00403004], ecx

:00401012 7507                  jne 0040101B

:00401014 BE01000000            mov esi, 00000001

:00401019 EB23                  jmp 0040103E

;       elseif edx

:0040101B 0BD2                  or edx, edx

:0040101D 7407                  je 00401026

:0040101F BE02000000            mov esi, 00000002

:00401024 EB18                  jmp 0040103E

;       elseif esi & 1

:00401026 F7C601000000          test esi, 00000001

:0040102C 7407                  je 00401035

:0040102E BE03000000            mov esi, 00000003

:00401033 EB09                  jmp 0040103E

;       ZERO?

:00401035 7507                  jne 0040103E

;       CARRY?

:00401037 7305                  jnb 0040103E

:00401039 BE04000000            mov esi, 00000004

:0040103E                       …(Windows环境下32位汇编语言程序设计(典藏版))

以下是一个C++程序分支语句反汇编之后的结果
00401500   push        ebp

00401501   mov         ebp,esp

00401503   sub         esp,44h

00401506   push        ebx

00401507   push        esi

00401508   push        edi

00401509   lea         edi,[ebp-44h]

0040150C   mov         ecx,11h

00401511   mov         eax,0CCCCCCCCh

00401516   rep stos    dword ptr [edi]                                                                // 初始化

32:       int x=3;

00401518   mov         dword ptr [ebp-4],3                                                        // 局部变量ebp-4赋值
33:       if (5>x)

0040151F   cmp         dword ptr [ebp-4],5                                                        // 局部变量和5比较

00401523   jge         Grammar_if_else_if+45h (00401545)                        // 大于等于则跳向下一个个分支语句.否则继续向下执行

34:       {

35:           cout<<"小于"<<endl;

00401525   push        offset @ILT+40(std::endl) (0040102d)                        // 相等则输出相等

0040152A   push        offset string "\xd0\xa1\xd3\xda" (00432034)

0040152F   push        offset std::cout (00439528)

00401534   call        @ILT+170(std::operator<<) (004010af)

00401539   add         esp,8

0040153C   mov         ecx,eax

0040153E   call        @ILT+120(std::basic_ostream<char,std::char_traits<char> >::operator<<) (0040107d)

36:       }

37:       else if (5<x)

00401543   jmp         Grammar_if_else_if+89h (00401589)                        // 输出相等后直接跳向分支语句结束

00401545   cmp         dword ptr [ebp-4],5                                                        // 继续和5比较

00401549   jle         Grammar_if_else_if+6Bh (0040156b)                        // 小于等于则跳向下一条分支语句处,否则继续向下执行

38:       {

39:           cout<<"大于"<<endl;

0040154B   push        offset @ILT+40(std::endl) (0040102d)

00401550   push        offset string "\xb4\xf3\xd3\xda" (0043202c)

00401555   push        offset std::cout (00439528)

0040155A   call        @ILT+170(std::operator<<) (004010af)

0040155F   add         esp,8

00401562   mov         ecx,eax

00401564   call        @ILT+120(std::basic_ostream<char,std::char_traits<char> >::operator<<) (0040107d)

40:       }

41:       else

00401569   jmp         Grammar_if_else_if+89h (00401589)                        // 输出大于后直接跳向分支语句结束

42:       {

43:           cout<<"相等"<<endl;

0040156B   push  offset @ILT+40(std::endl) (0040102d)        // 以上分支条件都不满足,则执行else语句

00401570   push        offset string "\xcf\xe0\xb5\xc8" (0043201c)

00401575   push        offset std::cout (00439528)

0040157A   call        @ILT+170(std::operator<<) (004010af)

0040157F   add         esp,8
00401582   mov         ecx,eax

00401584   call        @ILT+120(std::basic_ostream<char,std::char_traits<char> >::operator<<) (0040107d)

44:       }

45:   }

00401589   pop         edi                                // 平衡堆栈

0040158A   pop         esi

0040158B   pop         ebx

0040158C   add         esp,44h

0040158F   cmp         ebp,esp

00401591   call        __chkesp (004091d0)

00401596   mov         esp,ebp

00401598   pop         ebp

00401599   ret                                                                                // 返回给调用者
(该段代码转自网络)

每个结构都有一张脸  认清这张脸的结构以后看到很轻易就能认识


评分

参与人数 30HB +31 THX +18 收起 理由
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
sjtkxy + 1 + 1
Jawon + 1
24567 + 2
Soul1999 + 1
后学真 + 1
冷亦飞 + 1
temp + 1 + 1
娄胖胖 + 1
极速菜 + 1
消逝的过去 + 1
飞刀梦想 + 1
zxjzzh + 2 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
单桥真 + 1
kkk1l + 1
风里去 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
微熊猫 + 1
jaunic + 2
ghostxu + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
liugu0hai + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
bnjzzheng + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
成丰羽 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
hackysh + 1
lies + 1
秋风 + 1 + 1 好人有好报!你的热心我永远不忘!谢谢!
向往神鹰 + 1 + 1 好人有好报!你的热心我永远不忘!谢谢!
Scar-疤痕 + 3 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
ooooo尒禁 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
闪耀 + 2 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
逍遥绝尘 + 6 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Desire 发表于 2015-3-24 17:26 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
逍遥绝尘 发表于 2015-3-24 18:08 | 显示全部楼层

嗯,有意义的帖子,必须加分!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
jojaajj 发表于 2015-3-24 18:42 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
闪耀 发表于 2015-3-24 19:41 | 显示全部楼层

鹏哥哥好多啊
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
月光下の魔术师 发表于 2015-3-24 20:27 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Scar-疤痕 发表于 2015-3-24 22:34 | 显示全部楼层

小鹏辛苦了,纯手工
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Scar-疤痕 发表于 2015-3-24 22:37 | 显示全部楼层

小鹏转的一手好帖啊
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
hackysh 发表于 2022-2-9 17:29 | 显示全部楼层


[快捷回复]-感谢楼主热心分享!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
bnjzzheng 发表于 2022-2-26 15:53 | 显示全部楼层


[快捷回复]-感谢楼主热心分享!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表