Bomb 5
0000000000401062 <phase_5>:
401062: 53 push %rbx
401063: 48 83 ec 20 sub $0x20,%rsp
401067: 48 89 fb mov %rdi,%rbx //将输入的字符串放在rbx中
40106a: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax
401073: 48 89 44 24 18 mov %rax,0x18(%rsp)
401078: 31 c0 xor %eax,%eax
40107a: e8 9c 02 00 00 callq 40131b <string_length>
40107f: 83 f8 06 cmp $0x6,%eax //string lengh must 6
401082: 74 4e je 4010d2 <phase_5+0x70>
401084: e8 b1 03 00 00 callq 40143a <explode_bomb>
根据40107a,40107f
处代码可以得到,输入的字符串的长度为6。
根据下面代码中<strings_not_equal>
函数,可以知道我们最后经过处理,字符串需要与内存$0x40245e处的字符串
比较是否相等,运用p/s (char*)$0x40245e
,获得该比较字符串为flyers。
401089: eb 47 jmp 4010d2 <phase_5+0x70>
40108b: 0f b6 0c 03 movzbl (%rbx,%rax,1),%ecx //将输入字符串的第一个字符给ecx
40108f: 88 0c 24 mov %cl,(%rsp)
401092: 48 8b 14 24 mov (%rsp),%rdx
401096: 83 e2 0f and $0xf,%edx //取字符的最低4位到edx,大小从0~15
401099: 0f b6 92 b0 24 40 00 movzbl 0x4024b0(%rdx),%edx //根据rdx中的数字,从0x4024b0(%rdx)中取字符
//maduiersnfotvbylSo you think you can st