• 汇编查看C语言的循环


        这篇文章主要描述C语言中循环的反汇编。

    1. for

        在汇编中,可以利用cmp 和jp系列质量控制指令的次数。我们可以看下如下例子:

    1 int _tmain(int argc, _TCHAR* argv[])
    2 {
    3 int a = 0;
    4 for (int i = 0; i < 50; i++)
    5 {
    6 a++;
    7 }
    8 return 0;
    9 }

         这里首先贴出for循环的代码

    1 for (int i = 0; i < 50; i++)
    2 012E13C5 mov dword ptr [i],0
    3 012E13CC jmp wmain+37h (12E13D7h)
    4 012E13CE mov eax,dword ptr [i]
    5 012E13D1 add eax,1
    6 012E13D4 mov dword ptr [i],eax
    7 012E13D7 cmp dword ptr [i],32h
    8 012E13DB jge wmain+48h (12E13E8h)
    9 {
    10 a++;
    11 012E13DD mov eax,dword ptr [a]
    12 012E13E0 add eax,1
    13 012E13E3 mov dword ptr [a],eax
    14 }
    15 012E13E6 jmp wmain+2Eh (12E13CEh)

    for循环中,指令的循序是:

    # 定义变量i (012E13C5  )

    # 比较(i<50)012E13D7 

    # 如果相等,则跳出循环, 不得则执行(a++)

    # 执行完a++后, jmp到012E13CE  ,执行i++

    # 重复第二步

    2. do…while循环

        此循环的汇编形式比较简单,可以归为:

    cmp <循环变量>,<限制变量>

    jl <循环开始的>

        我们可以看下如下的列子:

    1 do
    2 {
    3 a++;
    4 } while (a < 50);

    汇编代码如下:

    1 do
    2 {
    3 a++;
    4 00C213C5 mov eax,dword ptr [a]
    5 00C213C8 add eax,1
    6 00C213CB mov dword ptr [a],eax
    7 } while (a < 50);
    8 00C213CE cmp dword ptr [a],32h
    9 00C213D2 jl wmain+25h (0C213C5h) //关键还是这里的一跳

    恩,很简单。

    3. while循环

        while 循环也是一种非常常用的循环,其共由三条指令实现:

    cmp <循环变量>,<限制变量>

    jpe b

    ……

    jmp A

    我们看下如下的列子:

    1 while(a < 50)
    2 {
    3 a++;
    4 }

    下面是相应的汇编源码:

    1 00FD13C5 cmp dword ptr [a],32h
    2 00FD13C9 jge wmain+36h (0FD13D6h) //如果a ==50, 不执行下面的了
    3   {
    4 a++;
    5 00FD13CB mov eax,dword ptr [a]
    6 00FD13CE add eax,1
    7 00FD13D1 mov dword ptr [a],eax
    8 }
    9 00FD13D4 jmp wmain+25h (0FD13C5h)

    一切好像很简单哦。

  • 相关阅读:
    CAP
    plugins for ST3 to frontend
    OAuth 2.0 详解
    Git SSH生成
    Android FrameWork 学习之Android 系统源码调试
    node.js安装步骤
    数据结构-- 队列 循环与顺序
    jsp之认识 servlet (基础、工作原理、容器请求处理)
    android 蓝牙开发---与蓝牙模块进行通讯 基于eclipse项目
    Android 仿微信调用第三方应用导航(百度,高德、腾讯)
  • 原文地址:https://www.cnblogs.com/sld666666/p/1858828.html
Copyright © 2020-2023  润新知