Assembly 炸弹实验室第六阶段:我在哪里犯了错误?
这是node6的代码Assembly 炸弹实验室第六阶段:我在哪里犯了错误?,assembly,x86-64,reverse-engineering,Assembly,X86 64,Reverse Engineering,这是node6的代码 0x00005555555558ab <+0>: endbr64 0x00005555555558af <+4>: push %r14 0x00005555555558b1 <+6>: push %r13 0x00005555555558b3 <+8>: push %r12 0x00005555555558b5 <+10>: push
0x00005555555558ab <+0>: endbr64
0x00005555555558af <+4>: push %r14
0x00005555555558b1 <+6>: push %r13
0x00005555555558b3 <+8>: push %r12
0x00005555555558b5 <+10>: push %rbp
0x00005555555558b6 <+11>: push %rbx
0x00005555555558b7 <+12>: sub $0x60,%rsp
0x00005555555558bb <+16>: mov %fs:0x28,%rax
0x00005555555558c4 <+25>: mov %rax,0x58(%rsp)
0x00005555555558c9 <+30>: xor %eax,%eax
0x00005555555558cb <+32>: mov %rsp,%r13
0x00005555555558ce <+35>: mov %r13,%rsi
0x00005555555558d1 <+38>: callq 0x555555555e53 <read_six_numbers>
0x00005555555558d6 <+43>: mov $0x1,%r14d
0x00005555555558dc <+49>: mov %rsp,%r12
0x00005555555558df <+52>: jmp 0x555555555909 <phase_6+94>
0x00005555555558e1 <+54>: callq 0x555555555e11 <explode_bomb>
0x00005555555558e6 <+59>: jmp 0x555555555918 <phase_6+109>
0x00005555555558e8 <+61>: add $0x1,%rbx
0x00005555555558ec <+65>: cmp $0x5,%ebx
0x00005555555558ef <+68>: jg 0x555555555901 <phase_6+86>
0x00005555555558f1 <+70>: mov (%r12,%rbx,4),%eax
0x00005555555558f5 <+74>: cmp %eax,0x0(%rbp)
0x00005555555558f8 <+77>: jne 0x5555555558e8 <phase_6+61>
0x00005555555558fa <+79>: callq 0x555555555e11 <explode_bomb>
0x00005555555558ff <+84>: jmp 0x5555555558e8 <phase_6+61>
0x0000555555555901 <+86>: add $0x1,%r14
0x0000555555555905 <+90>: add $0x4,%r13
0x0000555555555909 <+94>: mov %r13,%rbp
0x000055555555590c <+97>: mov 0x0(%r13),%eax
0x0000555555555910 <+101>: sub $0x1,%eax
0x0000555555555913 <+104>: cmp $0x5,%eax
0x0000555555555916 <+107>: ja 0x5555555558e1 <phase_6+54>
0x0000555555555918 <+109>: cmp $0x5,%r14d
0x000055555555591c <+113>: jg 0x555555555923 <phase_6+120>
0x000055555555591e <+115>: mov %r14,%rbx
0x0000555555555921 <+118>: jmp 0x5555555558f1 <phase_6+70>
0x0000555555555923 <+120>: mov $0x0,%esi
0x0000555555555928 <+125>: mov (%rsp,%rsi,4),%ecx
0x000055555555592b <+128>: mov $0x1,%eax
0x0000555555555930 <+133>: lea 0x38f9(%rip),%rdx # 0x555555559230 <node1>
0x0000555555555937 <+140>: cmp $0x1,%ecx
0x000055555555593a <+143>: jle 0x555555555947 <phase_6+156>
0x000055555555593c <+145>: mov 0x8(%rdx),%rdx
0x0000555555555940 <+149>: add $0x1,%eax
0x0000555555555943 <+152>: cmp %ecx,%eax
0x0000555555555945 <+154>: jne 0x55555555593c <phase_6+145>
0x0000555555555947 <+156>: mov %rdx,0x20(%rsp,%rsi,8)
0x000055555555594c <+161>: add $0x1,%rsi
0x0000555555555950 <+165>: cmp $0x6,%rsi
0x0000555555555954 <+169>: jne 0x555555555928 <phase_6+125>
0x0000555555555956 <+171>: mov 0x20(%rsp),%rbx
0x000055555555595b <+176>: mov 0x28(%rsp),%rax
0x0000555555555960 <+181>: mov %rax,0x8(%rbx)
0x0000555555555964 <+185>: mov 0x30(%rsp),%rdx
0x0000555555555969 <+190>: mov %rdx,0x8(%rax)
0x000055555555596d <+194>: mov 0x38(%rsp),%rax
0x0000555555555972 <+199>: mov %rax,0x8(%rdx)
0x0000555555555976 <+203>: mov 0x40(%rsp),%rdx
0x000055555555597b <+208>: mov %rdx,0x8(%rax)
0x000055555555597f <+212>: mov 0x48(%rsp),%rax
0x0000555555555984 <+217>: mov %rax,0x8(%rdx)
0x0000555555555988 <+221>: movq $0x0,0x8(%rax)
0x0000555555555990 <+229>: mov $0x5,%ebp
0x0000555555555995 <+234>: jmp 0x5555555559a0 <phase_6+245>
0x0000555555555997 <+236>: mov 0x8(%rbx),%rbx
0x000055555555599b <+240>: sub $0x1,%ebp
0x000055555555599e <+243>: je 0x5555555559b1 <phase_6+262>
0x00005555555559a0 <+245>: mov 0x8(%rbx),%rax
0x00005555555559a4 <+249>: mov (%rax),%eax
0x00005555555559a6 <+251>: cmp %eax,(%rbx)
0x00005555555559a8 <+253>: jle 0x555555555997 <phase_6+236>
0x00005555555559aa <+255>: callq 0x555555555e11 <explode_bomb>
0x00005555555559af <+260>: jmp 0x555555555997 <phase_6+236>
0x00005555555559b1 <+262>: mov 0x58(%rsp),%rax
0x00005555555559b6 <+267>: xor %fs:0x28,%rax
0x00005555555559bf <+276>: jne 0x5555555559ce <phase_6+291>
0x00005555555559c1 <+278>: add $0x60,%rsp
0x00005555555559c5 <+282>: pop %rbx
0x00005555555559c6 <+283>: pop %rbp
0x00005555555559c7 <+284>: pop %r12
0x00005555555559c9 <+286>: pop %r13
0x00005555555559cb <+288>: pop %r14
0x00005555555559cd <+290>: retq
0x00005555555559ce <+291>: callq 0x555555555250 <__stack_chk_fail@plt>
0x000055558ab:endbr64
0x000055558AF:推送%r14
0x000055558B1:推送%r13
0x000055558B3:推送%r12
0x000055558B5:推送%rbp
0x000055558B6:推送%rbx
0x000055558B7:sub$0x60,%rsp
0x000055558BB:mov%fs:0x28,%rax
0x000055558C4:mov%rax,0x58(%rsp)
0x000055558C9:xor%eax,%eax
0x000055558CB:mov%rsp,%r13
0x000055558CE:mov%r13,%rsi
0x000055558D1:callq 0x55555E53
0x000055558D6:mov$0x1,%r14d
0x000055558DC:mov%rsp,%r12
0x000055558DF:jmp 0x555909
0x000055558E1:callq 0x55555E11
0x000055558E6:jmp 0x555918
0x000055558E8:添加$0x1,%rbx
0x000055558EC:cmp$0x5,%ebx
0x000055558EF:jg 0x555901
0x000055558F1:mov(%r12,%rbx,4),%eax
0x000055558F5:cmp%eax,0x0(%rbp)
0x000055558F8:jne 0x555558E8
0x000055558FA:callq 0x55555E11
0x000055558FF:jmp 0x5558E8
0x00005555901:添加$0x1,%r14
0x00005555905:添加$0x4,%r13
0x00005555909:mov%r13,%rbp
0x0000555590C:mov 0x0(%r13),%eax
0x00005555910:子$0x1,%eax
0x00005555913:cmp$0x5,%eax
0x00005555916:ja 0x5558E1
0x00005555918:cmp$0x5,%r14d
0x0000555591C:jg 0x555923
0x0000555591E:mov%r14,%rbx
0x00005555921:jmp 0x5558F1
0x00005555923:mov$0x0,%esi
0x00005555928:mov(%rsp,%rsi,4),%ecx
0x0000555592B:mov$0x1,%eax
0x00005555930:lea 0x38f9(%rip),%rdx#0x559230
0x00005555937:cmp$0x1,%ecx
0x0000555593A:jle 0x555947
0x0000555593C:mov 0x8(%rdx),%rdx
0x00005555940:添加$0x1,%eax
0x00005555943:cmp%ecx,%eax
0x00005555945:jne 0x55593C
0x00005555947:mov%rdx,0x20(%rsp,%rsi,8)
0x0000555594C:添加$0x1,%rsi
0x00005555950:cmp$0x6,%rsi
0x00005555954:jne 0x555928
0x00005555956:mov 0x20(%rsp),%rbx
0x0000555595B:mov 0x28(%rsp),%rax
0x00005555960:mov%rax,0x8(%rbx)
0x00005555964:mov 0x30(%rsp),%rdx
0x00005555969:mov%rdx,0x8(%rax)
0x0000555596D:mov 0x38(%rsp),%rax
0x00005555972:mov%rax,0x8(%rdx)
0x00005555976:mov 0x40(%rsp),%rdx
0x0000555597B:mov%rdx,0x8(%rax)
0x0000555597F:mov 0x48(%rsp),%rax
0x00005555984:mov%rax,0x8(%rdx)
0x00005555988:movq$0x0,0x8(%rax)
0x00005555990:mov$0x5,%ebp
0x00005555995:jmp 0x5559A0
0x00005555997:mov 0x8(%rbx),%rbx
0x0000555599B:子$0x1,%ebp
0x0000555599E:je 0x5559B1
0x000055559A0:mov 0x8(%rbx),%rax
0x000055559A4:mov(%rax),%eax
0x000055559A6:cmp%eax,(%rbx)
0x000055559A8:jle 0x555997
0x000055559AA:callq 0x55555E11
0x000055559AF:jmp 0x555997
0x000055559B1:mov 0x58(%rsp),%rax
0x000055559B6:xor%fs:0x28,%rax
0x000055559BF:jne 0x555559CE
0x000055559C1:添加$0x60,%rsp
0x000055559C5:弹出%rbx
0x000055559C6:弹出%rbp
0x000055559C7:弹出%r12
0x000055559C9:弹出%r13
0x000055559CB:弹出%r14
0x000055559CD:retq
0x000055559CE:callq 0x555250
我知道这个阶段需要6个整数,因为“读取6个数字”。
我认为这六个数字是根据一定的条件排序的。
所以,我找到了node1~node6。
这是每个节点的信息
0x555555559230 <node1>: 0x00000303 0x00000001 0x55559240 0x00005555
0x555555559240 <node2>: 0x000001dc 0x00000002 0x55559250 0x00005555
0x555555559250 <node3>: 0x00000332 0x00000003 0x55559260 0x00005555
0x555555559260 <node4>: 0x000003c6 0x00000004 0x55559270 0x00005555
0x555555559270 <node5>: 0x000002d9 0x00000005 0x55559110 0x00005555
0x555555559110 <node6>: 0x000003c3 0x00000006 0x00000000 0x00000000
0x55559230:0x0000303 0x00000001 0x55559240 0x000055555
0x55559240:0x000001dc 0x00000002 0x55559250 0x00005555
0x55559250:0x00000332 0x00000003 0x559260 0x00005555
0x55559260:0x000003c6 0x00000004 0x55559270 0x0000555
0x55559270:0x000002d9 0x00000005 0x55559110 0x000055555
0x55559110:0x000003c3 0x00000006 0x00000000 0x00000000
找到这个之后,我将节点按大顺序排序。
“4 6 3 1 5 2”的结果出来了,我输入了结果,但结果是错误的。
因此,当我看到其他人已经解决的解决方案时,他们使用了7的补码。
所以我试着在使用它之后再次解决这个问题,但它又错了。
我又看了一遍代码,但没有任何进展。
我真的很想解决这个问题。请帮帮我。你试过倒序吗?是的,我试过了。但这是错误的@杰斯特里已经试过了,相反的顺序可以<代码>2 5 1 3 6 4。我尝试了“2 5 1 3 6 4”,结果是错误的。而且,使用7的补码是错误的@杰斯特是的!!!它确实有用@杰斯特:你试过相反的顺序吗?是的,我试过了。但这是错误的@杰斯特里已经试过了,相反的顺序可以<代码>2 5 1 3 6 4。我尝试了“2 5 1 3 6 4”,结果是错误的。而且,使用7的补码是错误的@杰斯特是的!!!它确实有用@小丑