一起来学反汇编-之switch语句

1.      switch语句

switch(a)                  //其中a为第一个局部变量
{
     case 0:
     {
          printf("a=0");
     }
     case 1:
     {
         printf("a=1");
         break;
     }
     case 100:
     {
          printf("a=100");
     }
     default:
     {
          printf("default");
     }
}

 

1.     MOV ECX,DWORD PTR SS:[EBP-4]      ;a送到ecx

2.     MOV DWORD PTR SS:[EBP-8],ECX      ;ecx(a的值)送到 新建的临时变量

3.     CMP DWORD PTR SS:[EBP-8],0           ;用新临时变量(a的值)0比较

4.     JE SHORT Console.00401080              ;相等则跳转到第一个分支第10

5.     CMP DWORD PTR SS:[EBP-8],1           ;用新临时变量(a的值)1比较

6.     JE SHORT Console.0040108D               ;相等则跳转到第二个分支第13

7.     CMP DWORD PTR SS:[EBP-8],64          ;用新临时变量(a的值)64h(100)比较

8.     JE SHORT Console.0040109C               ;相等则跳转到第三个分支第17

9.     JMP SHORT Console.004010A9             ;以上都不符合就跳转到default20

10.   PUSH OFFSET Console.??_C@_03IMHL@c?$DN0?> ;将静态区“a=0”字符串压栈

11.   CALL Console.printf                           ;调用printf

12.   ADD ESP,4                                       ;恢复调用前的栈

13.   PUSH OFFSET Console.??_C@_03CGOM@c?$DN1?>;将静态区“a=1”字符串压栈

14.   CALL Console.printf                      ;调用printf

15.   ADD ESP,4

16.   JMP SHORT Console.004010B6               ; break语句 跳出switch 23

17.   PUSH OFFSET Console.??_C@_05LNPA@a?$DN10>;将静态区“a=100”字符串压栈

18.   CALL Console.printf                      ; 调用printf

19.   ADD ESP,4

20.   PUSH OFFSET Console.??_C@_07FMEP@default>;将静态区“default”字符串压栈

21.   CALL Console.printf                      ; 调用printf

22.   ADD ESP,4

23.   之后的语句

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值