cassemblybinary-bomb

Binary Bomb phase 4 memory location


I am a bit over halfway through a Binary Bomb assignment and I am a little stumped. This is homework. Here is the dump of phase 4:

Dump of assembler code for function phase_4:
0x08048cdd <+0>:    push   %ebp
0x08048cde <+1>:    mov    %esp,%ebp
0x08048ce0 <+3>:    sub    $0x28,%esp
0x08048ce3 <+6>:    lea    -0x10(%ebp),%eax
0x08048ce6 <+9>:    mov    %eax,0xc(%esp)
0x08048cea <+13>:   lea    -0xc(%ebp),%eax
0x08048ced <+16>:   mov    %eax,0x8(%esp)
0x08048cf1 <+20>:   movl   $0x804a537,0x4(%esp)
0x08048cf9 <+28>:   mov    0x8(%ebp),%eax
0x08048cfc <+31>:   mov    %eax,(%esp)
0x08048cff <+34>:   call   0x8048860 <__isoc99_sscanf@plt> <=== calls for "%d %d"
0x08048d04 <+39>:   cmp    $0x2,%eax
0x08048d07 <+42>:   jne    0x8048d14 <phase_4+55>
0x08048d09 <+44>:   mov    -0x10(%ebp),%eax
0x08048d0c <+47>:   sub    $0x2,%eax
0x08048d0f <+50>:   cmp    $0x2,%eax
0x08048d12 <+53>:   jbe    0x8048d19 <phase_4+60>
0x08048d14 <+55>:   call   0x804921d <explode_bomb>
0x08048d19 <+60>:   mov    -0x10(%ebp),%eax
0x08048d1c <+63>:   mov    %eax,0x4(%esp)
0x08048d20 <+67>:   movl   $0x5,(%esp)
0x08048d27 <+74>:   call   0x8048c91 <func4>
0x08048d2c <+79>:   cmp    -0xc(%ebp),%eax <=== this is where I am stumped
0x08048d2f <+82>:   je     0x8048d36 <phase_4+89>
0x08048d31 <+84>:   call   0x804921d <explode_bomb>
0x08048d36 <+89>:   leave  
0x08048d37 <+90>:   ret    
End of assembler dump.

and this is the dump of func4

0x08048c91 <+0>:    push   %ebp
0x08048c92 <+1>:    mov    %esp,%ebp
0x08048c94 <+3>:    push   %edi
0x08048c95 <+4>:    push   %esi
0x08048c96 <+5>:    push   %ebx
0x08048c97 <+6>:    sub    $0x1c,%esp
0x08048c9a <+9>:    mov    0x8(%ebp),%ebx
0x08048c9d <+12>:   mov    0xc(%ebp),%esi
0x08048ca0 <+15>:   test   %ebx,%ebx
0x08048ca2 <+17>:   jle    0x8048cd0 <func4+63>
0x08048ca4 <+19>:   mov    %esi,%eax
0x08048ca6 <+21>:   cmp    $0x1,%ebx
0x08048ca9 <+24>:   je     0x8048cd5 <func4+68>
0x08048cab <+26>:   mov    %esi,0x4(%esp)
0x08048caf <+30>:   lea    -0x1(%ebx),%eax
0x08048cb2 <+33>:   mov    %eax,(%esp)
0x08048cb5 <+36>:   call   0x8048c91 <func4>
0x08048cba <+41>:   lea    (%eax,%esi,1),%edi
0x08048cbd <+44>:   mov    %esi,0x4(%esp)
0x08048cc1 <+48>:   sub    $0x2,%ebx
0x08048cc4 <+51>:   mov    %ebx,(%esp)
0x08048cc7 <+54>:   call   0x8048c91 <func4>
0x08048ccc <+59>:   add    %edi,%eax
0x08048cce <+61>:   jmp    0x8048cd5 <func4+68>
0x08048cd0 <+63>:   mov    $0x0,%eax
0x08048cd5 <+68>:   add    $0x1c,%esp
0x08048cd8 <+71>:   pop    %ebx
0x08048cd9 <+72>:   pop    %esi
0x08048cda <+73>:   pop    %edi
0x08048cdb <+74>:   pop    %ebp
0x08048cdc <+75>:   ret   

I am getting through to +79 with the guesses: "2 3" but I am lost at +79. How do I access the value at -0xc(%ebp) to find what is being comapred to %eax? I know I need to set the guesses such that func4 returns a value equal to that. Any help is appreciated.


Solution

  • See comment above. "That's quite simple, it's the first number you entered. Since scanf got that address passed as argument. See line +13."

    With 3 as the second number, func4 output 36, so entering guesses, "36 3" defused the bomb.