zoukankan      html  css  js  c++  java
  • 零基础逆向工程12_C语言06_switch语句反汇编

    12_C语言06_switch语句反汇编

    switch语句反汇编

    测试环境:VC++6.0

    分支少于4的时候没有意义,编译器会生成类似if...else之类的反汇编,不超过三个分支,不会生成索引表。

    会建立一张表,表里面存的各个分支语句函数的地址,然后来索引。

    case后面的常量可以是无序的,并不影响大表的生成。

    代码分析

    5:        switch(x)
    6:        {
    0040D728   mov         eax,dword ptr [ebp+8]   ;将参数3放到eax中
    0040D72B   mov         dword ptr [ebp-4],eax   
    0040D72E   mov         ecx,dword ptr [ebp-4]
    0040D731   sub         ecx,1
    0040D734   mov         dword ptr [ebp-4],ecx
    0040D737   cmp         dword ptr [ebp-4],3
    0040D73B   ja          $L349+0Dh (0040d781)
    0040D73D   mov         edx,dword ptr [ebp-4]
    0040D740   jmp         dword ptr [edx*4+40D792h]  ;从表中索引地址,然后跳转
    7:        case 1:
    8:            printf("AAA");
    0040D747   push        offset string "AAA" (00422fa4)
    0040D74C   call        printf (00401080)
    0040D751   add         esp,4
    9:            break;
    0040D754   jmp         $L349+0Dh (0040d781)
    10:       case 2:
    11:           printf("BBB");
    0040D756   push        offset string "BBB" (00422f54)
    0040D75B   call        printf (00401080)
    0040D760   add         esp,4
    12:           break;
    0040D763   jmp         $L349+0Dh (0040d781)
    13:       case 3:
    14:           printf("CCC");
    0040D765   push        offset string "CCC" (00422020)
    0040D76A   call        printf (00401080)
    0040D76F   add         esp,4
    15:           break;
    0040D772   jmp         $L349+0Dh (0040d781)
    16:       case 4:
    17:           printf("DDD");
    0040D774   push        offset string "DDD" (0042201c)
    0040D779   call        printf (00401080)
    0040D77E   add         esp,4
    18:           break;
    19:       }
    
    

    练习

    1.写一个switch语句,不生产大表也不生产小表,贴出对应的反汇编.
    2.写一个switch语句,只生产大表,贴出对应的反汇编
    3.写一个switch语句,生成大表和小表,贴出对应的反汇编
    4.为do..while语句生成的反汇编填写注释
    5.为while语句生成的反汇编填写注释
    6.为for语句生成的反汇编填写注释

  • 相关阅读:
    速耀达数据库安装(速达二次开发)
    WCF错误:由于目标计算机积极拒绝,无法连接;127.0.0.1:3456
    HTTP 错误 403.14
    速耀达企业ERP试用说明流程
    速耀达ERP手机App开始内测,完全兼容速达5000以上的任何版本
    新版速云达App即将发布内测
    如何解决速达软件出现主键、单号、编码相同的报错
    NTP服务器搭建
    linux操作系统不重启添加raid0步骤
    反向代理负载均衡调度:nginx
  • 原文地址:https://www.cnblogs.com/flatcc/p/7460123.html
Copyright © 2011-2022 走看看