2014-03-04 43 views
0

請幫助,我已經看了遍,我似乎無法找到任何東西。二進制炸彈第4階段 - 無法弄清楚

Dump of assembler code for function phase_4: 
    0x08048d81 <+0>: push %ebp 
    0x08048d82 <+1>: mov %esp,%ebp 
    0x08048d84 <+3>: sub $0x28,%esp 
    0x08048d87 <+6>: lea -0xc(%ebp),%eax 
    0x08048d8a <+9>: mov %eax,0x8(%esp) 
    0x08048d8e <+13>: movl $0x8049a68,0x4(%esp) 
    0x08048d96 <+21>: mov 0x8(%ebp),%eax 
    0x08048d99 <+24>: mov %eax,(%esp) 
    0x08048d9c <+27>: call 0x8048788 <[email protected]> 
    0x08048da1 <+32>: cmp $0x1,%eax 
    0x08048da4 <+35>: jne 0x8048dac <phase_4+43> 
    0x08048da6 <+37>: cmpl $0x0,-0xc(%ebp) 
    0x08048daa <+41>: jg  0x8048db1 <phase_4+48> 
    0x08048dac <+43>: call 0x8049236 <explode_bomb> 
    0x08048db1 <+48>: mov -0xc(%ebp),%eax 
    0x08048db4 <+51>: mov %eax,(%esp) 
    0x08048db7 <+54>: call 0x8048b50 <func4> 
    0x08048dbc <+59>: cmp $0x262,%eax 
    0x08048dc1 <+64>: je  0x8048dc8 <phase_4+71> 
    0x08048dc3 <+66>: call 0x8049236 <explode_bomb> 
    0x08048dc8 <+71>: leave 
    0x08048dc9 <+72>: ret 






Dump of assembler code for function func4: 
    0x08048b50 <+0>: push %ebp 
    0x08048b51 <+1>: mov %esp,%ebp 
    0x08048b53 <+3>: sub $0x18,%esp 
    0x08048b56 <+6>: mov %ebx,-0x8(%ebp) 
    0x08048b59 <+9>: mov %esi,-0x4(%ebp) 
    0x08048b5c <+12>: mov 0x8(%ebp),%ebx 
    0x08048b5f <+15>: mov $0x1,%eax 
    0x08048b64 <+20>: cmp $0x1,%ebx 
    0x08048b67 <+23>: jle 0x8048b83 <func4+51> 
    0x08048b69 <+25>: lea -0x1(%ebx),%eax 
    0x08048b6c <+28>: mov %eax,(%esp) 
    0x08048b6f <+31>: call 0x8048b50 <func4> 
    0x08048b74 <+36>: mov %eax,%esi 
    0x08048b76 <+38>: sub $0x2,%ebx 
    0x08048b79 <+41>: mov %ebx,(%esp) 
    0x08048b7c <+44>: call 0x8048b50 <func4> 
    0x08048b81 <+49>: add %esi,%eax 
    0x08048b83 <+51>: mov -0x8(%ebp),%ebx 
    0x08048b86 <+54>: mov -0x4(%ebp),%esi 
    0x08048b89 <+57>: mov %ebp,%esp 
    0x08048b8b <+59>: pop %ebp 
    0x08048b8c <+60>: ret 

我一直在想,有兩個數字,其中一個是610,因爲0x08048dbc < +59>:CMP $ 0x262,%eax中這0x262是610

+0

需要了解更多有關您正在進行的事情以及該做什麼的信息......事實上,這不是一個真正的「問題」。 – Floris

+0

您應該逐步瞭解使用GDB的實際情況。通常這個任務的重點是在使用調試器時變得非常高效。 – Requiem

+0

嗯,我覺得有兩個數字就是了。我可以回到最後一次測試中,它將我與最後一顆爆炸的炸彈進行比較,但它不斷爆炸。當我使用1和610時,它似乎得到了那麼多,但我似乎無法通過最後的測試 – user2396030

回答

0

如果你看一下格式字符串傳遞給sscanf,您很可能會看到單個%d指令。行+32檢查sscanf只讀1個數字,否則炸彈會爆炸。

+59正在檢查的func4返回值對610,所以你需要找出數養活func4這樣,它將使610回來。

沒有給太多的東西,讓我告訴你func4是一個簡單的遞歸實現一個衆所周知的序列。您應該能夠從彙編代碼中找到遞歸公式,然後您可能會識別它。