文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>一起来学反汇编-之if语句

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

时间:2010-09-30  来源:Xingg

 

最近,为了深入学习学C++的语法,不知不觉又涉及到反汇编的范畴里,和大家一起分享反汇编的学习。


PS:最近真是郁闷,本来想着学directX,然后又觉得应该先扎实GDI;学着GDI,又觉得得先熟悉C++的面向对象;要精通C++语法的内部原理,又得学会看反汇编。结果到反汇编来了...



部分知识参照上篇的《图解 “ { ”》

 

这次来学习if语句反汇编之后的内容,首先来个源码:

if(a>50 && a<100)                //其中a为第一个局部变量
     {
         printf("The number is %d\n",a);
     }
     else if(a<=50)
    {
         printf("Too small!\n");
     }
    else
    {
          printf("Too large!\n");
    }

Od反汇编后:

1.CMP DWORD PTR SS:[EBP-4],32;a和50(32h)比较  SS:[EBP-4]为什么是a,不明看《图解 “ { ”》

2.JLE SHORT Console.00401085;不大于则跳到11行 (else部分)

3.CMP DWORD PTR SS:[EBP-4],64;a和100(64h)比较

4.JGE SHORT Console.00401085;不小于则跳到11行(else部分)

5.MOV ECX,DWORD PTR SS:[EBP-4];将a送到ecx寄存器

6.PUSH ECX;讲ecx(a的值)压栈,作为printf的右一参数

7.PUSH OFFSET Console.??_C@_0BC@MJDO@The?5numbe>

          ; 将静态变量区的 “the number is %d\n”字符串压栈作为右二参数 

8.CALL Console.printf; 调用printf函数

9.ADD ESP,8;恢复调用前的栈(即将从栈中去掉之前两个参数,2*4字节)

10.JMP SHORT Console.004010A7 ;if语句执行后,跳到20行(退出整个if语句)

11.CMP DWORD PTR SS:[EBP-4],32 ;a和50(32h)对比

12.JG SHORT Console.0040109A;大于则跳到17行 (第二个else部分)

13.PUSH OFFSET Console.??_C@_0M@JFPO@Too?5small?>; “too small!\n”

14.CALL Console.printf; 调用printf函数

15.ADD ESP,4; 恢复函数调用前的栈

16.JMP SHORT Console.004010A7;跳到20行(退出整个if语句)

17.PUSH OFFSET Console.??_C@_0M@FPJP@Too?5large?>; “too large!\n”

18.CALL Console.printf; \printf

19.ADD ESP,4; 恢复函数调用前的栈

20.之后的语句…

 

排行榜 更多 +
猎枪行动

猎枪行动

飞行射击 下载
导弹袭击

导弹袭击

飞行射击 下载
猫猫突围封锁要塞新手打法

猫猫突围封锁要塞新手打法

飞行射击 下载