2016-04-20 142 views
0

這是phase_6拆卸:二進制bomb-階段6

08048dbf <phase_6>: 
8048dbf: 55      push %ebp 
8048dc0: 89 e5     mov %esp,%ebp 
8048dc2: 83 ec 18    sub $0x18,%esp 
8048dc5: c7 44 24 0c 00 00 00 movl $0x0,0xc(%esp) 
8048dcc: 00 
8048dcd: c7 44 24 08 0a 00 00 movl $0xa,0x8(%esp) 
8048dd4: 00 
8048dd5: c7 44 24 04 00 00 00 movl $0x0,0x4(%esp) 
8048ddc: 00 
8048ddd: 8b 45 08    mov 0x8(%ebp),%eax 
8048de0: 89 04 24    mov %eax,(%esp) 
8048de3: e8 0c fa ff ff   call 80487f4 <[email protected]> 
8048de8: a3 4c b5 04 08   mov %eax,0x804b54c 
8048ded: c7 04 24 4c b5 04 08 movl $0x804b54c,(%esp) 
8048df4: e8 76 ff ff ff   call 8048d6f <fun6> 
8048df9: ba 01 00 00 00   mov $0x1,%edx 
8048dfe: 8b 40 08    mov 0x8(%eax),%eax 
8048e01: 42      inc %edx //HERE 
8048e02: 83 fa 06    cmp $0x6,%edx//HERE 
8048e05: 7e f7     jle 8048dfe <phase_6+0x3f> 
8048e07: 8b 00     mov (%eax),%eax 
8048e09: 3b 05 4c b5 04 08  cmp 0x804b54c,%eax 
8048e0f: 74 05     je  8048e16 <phase_6+0x57> 
8048e11: e8 2d 06 00 00   call 8049443 <explode_bomb> 
8048e16: c9      leave 
8048e17: c3      ret 

fun6的dissasembly:

08048d6f <fun6>: 
8048d6f: 55      push %ebp 
8048d70: 89 e5     mov %esp,%ebp 
8048d72: 56      push %esi 
8048d73: 53      push %ebx 
8048d74: 8b 75 08    mov 0x8(%ebp),%esi 
8048d77: 8b 5e 08    mov 0x8(%esi),%ebx 
8048d7a: c7 46 08 00 00 00 00 movl $0x0,0x8(%esi) 
8048d81: 85 db     test %ebx,%ebx 
8048d83: 74 34     je  8048db9 <fun6+0x4a> 
8048d85: 89 f2     mov %esi,%edx 
8048d87: 89 f1     mov %esi,%ecx 
8048d89: 85 f6     test %esi,%esi 
8048d8b: 74 15     je  8048da2 <fun6+0x33> 
8048d8d: 8b 06     mov (%esi),%eax 
8048d8f: 3b 03     cmp (%ebx),%eax 
8048d91: 7e 0f     jle 8048da2 <fun6+0x33> 
8048d93: 89 d1     mov %edx,%ecx 
8048d95: 8b 52 08    mov 0x8(%edx),%edx 
8048d98: 85 d2     test %edx,%edx 
8048d9a: 74 06     je  8048da2 <fun6+0x33> 
8048d9c: 8b 02     mov (%edx),%eax 
8048d9e: 3b 03     cmp (%ebx),%eax 
8048da0: 7f f1     jg  8048d93 <fun6+0x24> 
8048da2: 39 d1     cmp %edx,%ecx 
8048da4: 74 05     je  8048dab <fun6+0x3c> 
8048da6: 89 59 08    mov %ebx,0x8(%ecx) 
8048da9: eb 02     jmp 8048dad <fun6+0x3e> 
8048dab: 89 de     mov %ebx,%esi 
8048dad: 8b 4b 08    mov 0x8(%ebx),%ecx 
8048db0: 89 53 08    mov %edx,0x8(%ebx) 
8048db3: 89 cb     mov %ecx,%ebx 
8048db5: 85 c9     test %ecx,%ecx 
8048db7: 75 cc     jne 8048d85 <fun6+0x16> 
8048db9: 89 f0     mov %esi,%eax 
8048dbb: 5b      pop %ebx 
8048dbc: 5e      pop %esi 
8048dbd: 5d      pop %ebp 
8048dbe: c3      ret 

我知道,這個階段是一個鏈表,但我不知道使用多少個輸入。這兩個地方我phase_6表示讓我覺得需要有6個輸入,但也有看起來像這樣的9個節點:

0x804b510 <node5>:  0x000003e3  0x00000005  0x804b528 (995) 
0x804b528 <node3>:  0x000003d2  0x00000003  0x0804b51c (978) 
0x804b51c <node4>:  0x00000365  0x00000004  0x0804b504 (869) 
0x804b504 <node6>:  0x000002ff  0x00000006  0x0804b4e0 (767) 
0x804b4e0 <node9>:  0x00000280  0x00000009  0x0804b534 (640)    
0x804b534 <node2>:  0x000001b6  0x00000002  0x0804b4f8 (438) 
0x804b4f8 <node7>:  0x00000106  0x00000007  0x0804b540 (262) 
0x804b540 <node1>:  0x000000c6  0x00000001  0x0804b4ec (198) 
0x804b4ec <node8>:  0x00000052  0x00000008  0x0804b54c (82) 

凡在括號內的數字爲轉換從十六進制的十進制數字在第一列。對我來說特別的是這些節點似乎按降序排列。我已經嘗試了5 3 4 6 9 2 7 1 8的輸入,它沒有工作(也反過來)。

我的問題是如何知道有多少預期的輸入?我相信它是6,但爲什麼會有9個節點?

+4

這聽起來像一個令人驚訝的好問題,問大學教授你在哪裏付學費.. :) :) –

+0

@DavidHoelzer我做到了!他對我沒有答案,所以我來到了這裏。 –

+0

哇。真的嗎?那麼,有人一定會看看。今天我的大腦太累了。 –

回答

2

只有1個輸入,這應該從strtol的呼叫8048de3中顯而易見。列表中的節點數量與輸入數量無關。

由於您只詢問輸入的數量,這是我唯一回答的問題。

+0

好的,有趣。那麼,在這種情況下,在'8048e02'行上的'phase_6'上迭代到第6個節點?那麼,一旦它有第六個節點,它就會到達'8048e09'行,並比較輸入是否是第六個節點的值?如果它們是平等的,那麼這個函數起作用,但如果它們不相等,那麼這個炸彈被稱爲? –

+1

是的,這是正確的。假設'0x804b54c'沒有被'fun6'改變,我沒有檢查。另外,它是來自'%eax'中返回的'fun6'節點的第6個節點。 – Jester

+0

是的,'fun6'沒有改變。我剛剛完成它,這就是它。 –