反汇编逆向实例_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.    function(1,2);
15 14.}   

反汇编如下

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

011D1A40 push ebp

011D1A41 mov ebp,esp

011D1A43 sub esp,0D8h

 

011D1A49 push ebx                 ;保存环境

011D1A4A push esi       ;保存环境

011D1A4B push edi       ;保存环境

 

011D1A4C lea edi,[ebp-0D8h]

011D1A52 mov ecx,36h

011D1A57 mov eax,0CCCCCCCCh

011D1A5C rep stos dword ptr es:[edi]     ;初始化为0xCC

1   int c=a+b;

 

011D1A5E mov eax,dword ptr [a]

011D1A61 add eax,dword ptr [b]

011D1A64 mov dword ptr [c],eax

;---------------------------------------------------------------------------------------------

1 int i;
2
3     for(i=0;i<50;i++)

011D1A67 mov dword ptr [i],0                          ;i=0

011D1A6E jmp function+39h (11D1A79h)          ;跳转到判断i是否大于50

011D1A70 mov eax,dword ptr [i]                         ;

011D1A73 add eax,1                                          ;执行了i=i+1

011D1A76 mov dword ptr [i],eax                         ;

;

011D1A79 cmp dword ptr [i],32h                         ;判断i是否大于50

011D1A7D jge function+4Ah (11D1A8Ah)             ;如果大于等于50则跳出for循环,否则继续执行.

1  {
2
3         c=c+i;  

011D1A7F mov eax,dword ptr [c]                          ;执行了c=c+i;

011D1A82 add eax,dword ptr [i]                           ;    |

011D1A85 mov dword ptr [c],eax                          ;    |

011D1A88 jmp function+30h (11D1A70h)              ;如果不大于跳转到执行i++的位置

;---------------------------------------------------------------------------------------------、

1  return c;

011D1A8A mov eax,dword ptr [c]

 

011D1A8D pop edi   ;恢复环境

011D1A8E pop esi    ;恢复环境

011D1A8F pop ebx   ;恢复环境

 

011D1A90 mov esp,ebp

011D1A92 pop ebp

 

011D1A93 ret

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

时间: 2024-10-25 00:05:20

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

反汇编逆向实例_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 "

反汇编逆向实例_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"

反汇编逆向实例_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