反汇编逆向实例_dowhile语句反汇编

反汇编逆向实例_dowhile语句反汇编

                                                                                    by:比方

示例代码如下:

 1  #include"stdio.h"
 2  int function(int a,int b)
 3  {
 4       int c=a+b;
 5       int i=0;
 6       do
 7       {
 8           c=c+i;
 9       }while(i<50);
10       return c;
11  }
12  void main()
13  {
14       function(1,2);
15  }

反汇编代码

1 #include "stdio.h"
2
3
4 int function(int a,int b)
5
6 {

012E1A40 push ebp

012E1A41 mov ebp,esp

012E1A43 sub esp,0D8h

012E1A49 push ebx                                           ;保存环境

012E1A4A push esi

012E1A4B push edi

012E1A4C lea edi,[ebp-0D8h]                            ;初始化为0xCC

012E1A52 mov ecx,36h

012E1A57 mov eax,0CCCCCCCCh

012E1A5C rep stos dword ptr es:[edi]

1     int c=a+b;

012E1A5E mov eax,dword ptr [a]

012E1A61 add eax,dword ptr [b]

012E1A64 mov dword ptr [c],eax

1     int i=0;

012E1A67 mov dword ptr [i],0

  do
    {
        c=c+i;

012E1A6E mov eax,dword ptr [c]     ;进过前面的两章讲解,对于这样的结构相比已经很熟习了吧

012E1A71 add eax,dword ptr [i]

012E1A74 mov dword ptr [c],eax

1    }while(i<50);

012E1A77 cmp dword ptr [i],32h                ;     比较是否大于50,如果小于则往上跳

012E1A7B jl function+2Eh (12E1A6Eh)

1     return c;

012E1A7D mov eax,dword ptr [c]

}

012E1A80 pop edi

012E1A81 pop esi

012E1A82 pop ebx

012E1A83 mov esp,ebp

012E1A85 pop ebp

012E1A86 ret  

总结:do while的循环相对来说容易识别很多

do_Begin

..

...

jxx do_Begin                ;这里有一个往上跳的过程

            ;先执行语句块,在做比较,当条件成立时,会继续执行语句快,

反汇编逆向实例_dowhile语句反汇编

时间: 2024-10-25 18:30:03

反汇编逆向实例_dowhile语句反汇编的相关文章

反汇编逆向实例_while语句反汇编

反汇编逆向实例_while语句反汇编 by:比方 逆向反汇编第四章, while语句反汇编示例代码: 1 #include"stdio.h" 2 int function(int a,int b) 3 { 4 int c=a+b; 5 int i=0; 6 while(i<50) 7 { 8 c=c+i; 9 } 10 return c; 11 } 12 void main() 13 { 14 function(1,2); 15 } 反汇编代码: 1 #include "

反汇编逆向实例_For语句反汇编

反汇编逆向实例_For语句反汇编 by:比方 逆向反汇编第二章,For语句反汇编 示例代码: 1 #include"stdio.h" 2 1.int function(int a,int b) 3 2.{ 4 3. int c=a+b; 5 4. int i; 6 5. for(i=0;i<50;i++) 7 6. { 8 7. c=c+i; 9 8. } 10 9. return c; 11 10.} 12 11.void main() 13 12.{ 14 13. funct

反汇编逆向实例_ifelse语句反汇编

反汇编逆向实例_ifelse语句反汇编 by:比方 逆向反汇编第五章,ifelse语句反汇编  by:比方示例代码: 1 #include"stdio.h" 2 int function(int a,int b) 3 { 4 int c=a+b; 5 6 if(c>0&&c<10) 7 { 8 printf("c>0"); 9 } 10 else if(c>10&&c<100) 11 { 12 print

反汇编逆向实例_简单函数调用

反汇编逆向实例_简单函数调用 by:比方 逆向反汇编第一章,基本函数调用 示例代码: 1 #include"stdio.h" 2 int function(int a,int b) 3 { 4 int c=a+b; 5 return c; 6 } 7 void main() 8 { 9 function(1,2); 10 getchar(); 11 } 反汇编结果: 1 #include "stdio.h" 2 3 int function(int a,int b)

自制反汇编逆向分析工具 迭代第五版本 (一)

这个版本添加了几个功能,分开几篇来写. 本篇是关于这样一个功能,显示选定的条件指令与其它条件分支的关系. 它们的关系分别在初版分支形态分布图,和第二版的汇编代码对应图同样展示. 红色表示被选中的目标 蓝色表示被选定的指令的执行位置之前,可能因为条件跳转而直接跳入到被选中的条件分支内(,忽略该条件判断). 绿色表示在被选中的条件分支内,因为其它条件跳转而直接离开目前分支的代码. 紫色表示在被选中的条件分支内,无条件跳转分支并且直接离开目前分支的代码. 浅紫色表示在被选中的条件分支内,无条件跳转分支

自制反汇编逆向分析工具 迭代第三版本

将一个函数的分支跳转逆向生成cpp文件,使逆向分析过程从分支跳转的分析中解放出来,工具首要的作用是应当解放生产力. 下面是效果图: 然后附上上面效果图对应的反汇编源代码和工具逆向生成的cpp文件. 有了这个逆向出来的文件,接下来的逆向工作有点像在做填空,但已经帮大忙. 不能上传附件,贴代码. 某比较大的函数的反汇编代码 QuartzCore`CA::Context::commit_transaction: -> <+0>: pushq %rbp <+1>: movq %rsp

自制反汇编逆向分析工具 迭代第四版本

上一个版本,本工具支持的第一个逆向策略,(对反汇编的函数体内的分支控制结构逆向生成cpp代码,)一直都可以正常工作,直到遇上了一个函数.这个使我的逆向策略算法失效的函数,主要的特点是它含有众多无条件跳转指令(,都是在函数体内的跳转). 为什么无条件跳转指令会使得我的第一个逆向算法失效,因为这些无条件跳转指令让函数的执行流变得不易于线性理解. 在一个没有反汇编出来的函数汇编代码中,如果无条件跳转指令很少,特殊地连一条无条件跳转指令也没有时,将汇编代码的执行流当作行文阅读,总可以找到一个特例让所有条

自制反汇编逆向分析工具 迭代第六版本 (五)

本工具从最初版的跳转分布图只为了更直观地分析反汇编代码的分支结构,第三版开始对直观图进行逆向分支代码的输出,第四版对分支输出策略的一些探索,第五版结合之前的探索进行改进.第六版在现在功能的基础上进行增强,利用第六版(一)的基本功能-直译,第六版(二)对条件分支增加条件判断翻译,以及改进在函数调用处附带备选参数参考. 第六版(三)将(一)和(二)组合在一起进行逆向代码输出. 第六版(四),在(三)的基础上增加对原子操作指令的逆向以及c++函数的逆向. 本篇是(五),对待c风格的函数符号调用的翻译,

自制反汇编逆向分析工具 迭代第六版本 (三)

本工具从最初版的跳转分布图只为了更直观地分析反汇编代码的分支结构,第三版开始对直观图进行逆向分支代码的输出,第四版对分支输出策略的一些探索,第五版结合之前的探索进行改进.第六版在现在功能的基础上进行增强,利用第六版(一)的基本功能-直译,第六版(二)对条件分支增加条件判断翻译,以及改进在函数调用处附带备选参数参考. 现在将第六版的(一)和(二)组合在一起进行逆向代码输出. 下面选了三个例子 void prepare_commit(CA::Transaction*) { // 0 pushq %r