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

首先截图所示

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汇编)