二元炸弹阶段6

时间:2017-02-02 20:38:28

标签: assembly disassembly

我无法确定输入所需的位数。当我单步执行代码时,我可以找到9个节点,但我仍然无法找出格式。总的来说,真正发生了什么。我可以看到它正在循环并检查每个节点,但我无法分辨它与它的比较,因为它并不仅仅出现在节点本身。

00000000004010dd <phase_6>:
  4010dd:   53                      push   %rbx
  4010de:   ba 0a 00 00 00          mov    $0xa,%edx
  4010e3:   be 00 00 00 00          mov    $0x0,%esi
  4010e8:   e8 f3 fa ff ff          callq  400be0 <strtol@plt>
  4010ed:   48 89 c3                mov    %rax,%rbx
  4010f0:   bf 20 33 60 00          mov    $0x603320,%edi
  4010f5:   e8 7b ff ff ff          callq  401075 <fun6>
  4010fa:   ba 08 00 00 00          mov    $0x8,%edx
  4010ff:   48 8b 40 08             mov    0x8(%rax),%rax
  401103:   83 ea 01                sub    $0x1,%edx
  401106:   75 f7                   jne    4010ff <phase_6+0x22>
  401108:   39 18                   cmp    %ebx,(%rax)
  40110a:   74 05                   je     401111 <phase_6+0x34>
  40110c:   e8 fa 04 00 00          callq  40160b <explode_bomb>
  401111:   5b                      pop    %rbx
  401112:   c3                      retq 

0000000000401075 <fun6>:
  401075:   48 89 f8                mov    %rdi,%rax
  401078:   4c 8b 47 08             mov    0x8(%rdi),%r8
  40107c:   48 c7 47 08 00 00 00    movq   $0x0,0x8(%rdi)
  401083:   00 
  401084:   48 89 fa                mov    %rdi,%rdx
  401087:   4d 85 c0                test   %r8,%r8
  40108a:   75 38                   jne    4010c4 <fun6+0x4f>
  40108c:   f3 c3                   repz retq 
  40108e:   48 89 d1                mov    %rdx,%rcx
  401091:   48 8b 51 08             mov    0x8(%rcx),%rdx
  401095:   48 85 d2                test   %rdx,%rdx
  401098:   74 09                   je     4010a3 <fun6+0x2e>
  40109a:   39 32                   cmp    %esi,(%rdx)
  40109c:   7f f0                   jg     40108e <fun6+0x19>
  40109e:   eb 03                   jmp    4010a3 <fun6+0x2e>
  4010a0:   48 89 c1                mov    %rax,%rcx
  4010a3:   48 39 d1                cmp    %rdx,%rcx
  4010a6:   74 06                   je     4010ae <fun6+0x39>
  4010a8:   4c 89 41 08             mov    %r8,0x8(%rcx)
  4010ac:   eb 03                   jmp    4010b1 <fun6+0x3c>
  4010ae:   4c 89 c0                mov    %r8,%rax
  4010b1:   49 8b 48 08             mov    0x8(%r8),%rcx
  4010b5:   49 89 50 08             mov    %rdx,0x8(%r8)
  4010b9:   48 85 c9                test   %rcx,%rcx
  4010bc:   74 1d                   je     4010db <fun6+0x66>
  4010be:   49 89 c8                mov    %rcx,%r8
  4010c1:   48 89 c2                mov    %rax,%rdx
  4010c4:   48 85 d2                test   %rdx,%rdx
  4010c7:   74 d7                   je     4010a0 <fun6+0x2b>
  4010c9:   41 8b 30                mov    (%r8),%esi
  4010cc:   48 89 c1                mov    %rax,%rcx
  4010cf:   39 32                   cmp    %esi,(%rdx)
  4010d1:   7f be                   jg     401091 <fun6+0x1c>
  4010d3:   48 89 c2                mov    %rax,%rdx
  4010d6:   4c 89 c0                mov    %r8,%rax
  4010d9:   eb d6                   jmp    4010b1 <fun6+0x3c>
  4010db:   f3 c3                   repz retq 

以下是我找到的节点

0x603320 <node1>:   0x0b    0x01    0x00
(gdb) x/3x *($edi+0x8)
0x603330 <node2>:   0x2f    0x03    0x00
(gdb) x/3x *(*($edi+0x8)+0x8)
0x603340 <node3>:   0x72    0x02    0x00
(gdb) x/3x *(*(*($edi+0x8)+0x8)+0x8)
0x603350 <node4>:   0xd2    0x03    0x00
(gdb) x/3x *(*(*(*($edi+0x8)+0x8)+0x8)+0x8)
0x603360 <node5>:   0xa5    0x00    0x00
(gdb) x/3x *(*(*(*(*($edi+0x8)+0x8)+0x8)+0x8)+0x8)
0x603370 <node6>:   0x45    0x01    0x00
(gdb) x/3x *(*(*(*(*(*($edi+0x8)+0x8)+0x8)+0x8)+0x8)+0x8)
0x603380 <node7>:   0x59    0x02    0x00
(gdb) x/3x *(*(*(*(*(*(*($edi+0x8)+0x8)+0x8)+0x8)+0x8)+0x8)+0x8)
0x603390 <node8>:   0x63    0x00    0x00
(gdb) x/3x *(*(*(*(*(*(*(*($edi+0x8)+0x8)+0x8)+0x8)+0x8)+0x8)+0x8)+0x8)
0x6033a0 <node9>:   0xa6    0x00    0x00

我也发现这很奇怪,因为我认为显示的最终数字应该是指向下一个节点的指针,但它们都只是0?

0 个答案:

没有答案