美文网首页
简单分析一个for循环的X86汇编

简单分析一个for循环的X86汇编

作者: 一__谷__作气 | 来源:发表于2019-08-28 15:30 被阅读0次

    首先截图所示

    Image.png

    上图是使用Visual Studio 2017调试中得到的一个简单的反汇编代码

    在Visual Studio 2017中会给出辅助C代码便于观看,

    那么我们开始分析

    1.第一行是定义一个dword 并赋值为0

    2.第二行是直接跳转(jmp)到(main函数的地址+27h)的地址,Visual Studio 2017提示是OB717E0h

    3.我们跟进到OB717E0h 比较(cmp)我们定义的dword的值和0Ah(也就是十进制的10)的大小a<10

    4.判断这个dword的值是否大于等于(jge)10 ,如果符合则跳转到0B717F9h处,不等于则往下单步执行

    5.我们的for循环是创建了一个a=0,即对应汇编中的dword,显然不大于10,则单步执行

    6.把dword的值赋值给eax, (add eax,dword ptr [ebp -8])

    7.push eax 入栈。开始执行printf方法,就要入栈

    8.开始调用printf方法(call)

    9.调用完了之后,回到OB717D7h

    10.然后给eax重新赋值,

    11.eax自增1,实现a++

    12.把eax的值重新给dword ,回到OB717E0h,进行dword和0Ah比较,则回到第3步。然后一直循环

    13.到最后判断的时候,dword=10则满足第四步的条件直接跳到OB717F9h,即 跳出for循环

    14.进行下一步的代码(return 0;)

    简单分析一个for循环的X86汇编

    相关文章

      网友评论

          本文标题:简单分析一个for循环的X86汇编

          本文链接:https://www.haomeiwen.com/subject/lcfmectx.html