2016-04-20 107 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'没有改变。我刚刚完成它,这就是它。 –