previous | start | next

Reverse engineering: loops (2)

 int dw_loop(int x, int y, int n);
   
Register Variable Initially
%eax x x
%ecx y y
%edx n n
    1   
    2   dw_loop:
    3           pushl   %ebp
    4           movl    %esp, %ebp
    5           movl    8(%ebp), %eax          
    6           movl    12(%ebp), %ecx
    7           movl    16(%ebp), %edx
    8   .L3:                               L3:                      
    9           addl    %edx, %eax           x = x + n;             
   10           imull   %edx, %ecx           y = y * n;             
   11           subl    $1, %edx             n = n - 1;             
   12           testl   %edx, %edx           if (n <= 0) goto L5;
   13           jle     .L5                                                         
   14           cmpl    %edx, %ecx           if (y < n) goto L3  
   15           jl      .L3                                                         
   16   .L5:                               L5:                      
   17           popl    %ebp                 return x;              
   18           ret


previous | start | next