0x00000000004011b1 <phase_6+0>: push %r13
0x00000000004011b3 <phase_6+2>: push %r12
0x00000000004011b5 <phase_6+4>: push %rbp
0x00000000004011b6 <phase_6+5>: push %rbx
0x00000000004011b7 <phase_6+6>: sub $0x58,%rsp
0x00000000004011bb <phase_6+10>: mov $0x503af0,%r13d
0x00000000004011c1 <phase_6+16>: lea 0x30(%rsp),%rsi
0x00000000004011c6 <phase_6+21>: callq 0x4013c1 <read_six_numbers>
0x00000000004011cb <phase_6+26>: mov $0x0,%r12d
0x00000000004011d1 <phase_6+32>: movslq %r12d,%rax
0x00000000004011d4 <phase_6+35>: mov 0x30(%rsp,%rax,4),%eax
0x00000000004011d8 <phase_6+39>: dec %eax
0x00000000004011da <phase_6+41>: cmp $0x5,%eax
0x00000000004011dd <phase_6+44>: jbe 0x4011e4 <phase_6+51>
0x00000000004011df <phase_6+46>: callq 0x4017e5 <explode_bomb>
0x00000000004011e4 <phase_6+51>: lea 0x1(%r12),%ebx
0x00000000004011e9 <phase_6+56>: cmp $0x5,%ebx
0x00000000004011ec <phase_6+59>: jg 0x40120a <phase_6+89>
0x00000000004011ee <phase_6+61>: movslq %r12d,%rbp
0x00000000004011f1 <phase_6+64>: movslq %ebx,%rdx
0x00000000004011f4 <phase_6+67>: mov 0x30(%rsp,%rbp,4),%eax
0x00000000004011f8 <phase_6+71>: cmp 0x30(%rsp,%rdx,4),%eax
0x00000000004011fc <phase_6+75>: jne 0x401203 <phase_6+82>
0x00000000004011fe <phase_6+77>: callq 0x4017e5 <explode_bomb>
0x0000000000401203 <phase_6+82>: inc %ebx
0x0000000000401205 <phase_6+84>: cmp $0x5,%ebx
0x0000000000401208 <phase_6+87>: jle 0x4011f1 <phase_6+64>
0x000000000040120a <phase_6+89>: inc %r12d
0x000000000040120d <phase_6+92>: cmp $0x5,%r12d
0x0000000000401211 <phase_6+96>: jle 0x4011d1 <phase_6+32>
0x0000000000401213 <phase_6+98>: mov $0x0,%r12d
0x0000000000401219 <phase_6+104>: mov $0x7,%ecx
0x000000000040121e <phase_6+109>: movslq %r12d,%rdx
0x0000000000401221 <phase_6+112>: mov %ecx,%eax
0x0000000000401223 <phase_6+114>: sub 0x30(%rsp,%rdx,4),%eax
0x0000000000401227 <phase_6+118>: mov %eax,0x30(%rsp,%rdx,4)
0x000000000040122b <phase_6+122>: inc %r12d
0x000000000040122e <phase_6+125>: cmp $0x5,%r12d
0x0000000000401232 <phase_6+129>: jle 0x40121e <phase_6+109>
0x0000000000401234 <phase_6+131>: mov $0x0,%r12d
0x000000000040123a <phase_6+137>: mov %r13,%rbp
0x000000000040123d <phase_6+140>: mov $0x1,%ebx
0x0000000000401242 <phase_6+145>: movslq %r12d,%rax
0x0000000000401245 <phase_6+148>: cmpl $0x1,0x30(%rsp,%rax,4)
0x000000000040124a <phase_6+153>: jle 0x40125a <phase_6+169>
0x000000000040124c <phase_6+155>: mov 0x30(%rsp,%rax,4),%eax
0x0000000000401250 <phase_6+159>: mov 0x8(%rbp),%rbp
0x0000000000401254 <phase_6+163>: inc %ebx
0x0000000000401256 <phase_6+165>: cmp %ebx,%eax
0x0000000000401258 <phase_6+167>: jg 0x401250 <phase_6+159>
0x000000000040125a <phase_6+169>: movslq %r12d,%rax
0x000000000040125d <phase_6+172>: mov %rbp,(%rsp,%rax,8)
0x0000000000401261 <phase_6+176>: inc %r12d
0x0000000000401264 <phase_6+179>: cmp $0x5,%r12d
0x0000000000401268 <phase_6+183>: jle 0x40123a <phase_6+137>
0x000000000040126a <phase_6+185>: mov (%rsp),%rbp
0x000000000040126e <phase_6+189>: mov %rbp,%r13
0x0000000000401271 <phase_6+192>: mov $0x1,%r12d
0x0000000000401277 <phase_6+198>: movslq %r12d,%rax
0x000000000040127a <phase_6+201>: mov (%rsp,%rax,8),%rax
0x000000000040127e <phase_6+205>: mov %rax,0x8(%rbp)
0x0000000000401282 <phase_6+209>: mov %rax,%rbp
0x0000000000401285 <phase_6+212>: inc %r12d
0x0000000000401288 <phase_6+215>: cmp $0x5,%r12d
0x000000000040128c <phase_6+219>: jle 0x401277 <phase_6+198>
0x000000000040128e <phase_6+221>: movq $0x0,0x8(%rax)
0x0000000000401296 <phase_6+229>: mov %r13,%rbp
0x0000000000401299 <phase_6+232>: mov $0x0,%r12d
0x000000000040129f <phase_6+238>: mov 0x8(%rbp),%rdx
0x00000000004012a3 <phase_6+242>: mov 0x0(%rbp),%eax
0x00000000004012a6 <phase_6+245>: cmp (%rdx),%eax
0x00000000004012a8 <phase_6+247>: jge 0x4012af <phase_6+254>
0x00000000004012aa <phase_6+249>: callq 0x4017e5 <explode_bomb>
0x00000000004012af <phase_6+254>: mov 0x8(%rbp),%rbp
0x00000000004012b3 <phase_6+258>: inc %r12d
0x00000000004012b6 <phase_6+261>: cmp $0x4,%r12d
0x00000000004012ba <phase_6+265>: jle 0x40129f <phase_6+238>
0x00000000004012bc <phase_6+267>: add $0x58,%rsp
0x00000000004012c0 <phase_6+271>: pop %rbx
0x00000000004012c1 <phase_6+272>: pop %rbp
0x00000000004012c2 <phase_6+273>: pop %r12
0x00000000004012c4 <phase_6+275>: pop %r13
0x00000000004012c6 <phase_6+277>: retq
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
by: Infinity08Posted on 2009-09-22 at 00:47:24ID: 25390387
>> So far, I've figured out that this phase takes 6 decimal arguments and then swaps its order.
It doesn't exactly reverse the order (try an input of 654123 for example). Instead it does this :
>> 0x0000000000401223 <phase_6+114>: sub 0x30(%rsp,%rdx,4),%eax
>> 0x0000000000401227 <phase_6+118>: mov %eax,0x30(%rsp,%rdx,4)
>> I sense that it's a linked list... but somehow I am lost.
Yes. That's good.
If it's a linked list, what do these instructions do ?
>> 0x0000000000401250 <phase_6+159>: mov 0x8(%rbp),%rbp
>> 0x0000000000401254 <phase_6+163>: inc %ebx
>> 0x0000000000401256 <phase_6+165>: cmp %ebx,%eax
>> 0x0000000000401258 <phase_6+167>: jg 0x401250 <phase_6+159>