Хорошо, ребята, я знаю, что в стеке уже есть аналогичный вопрос, но я до сих пор не понимаю, как сопоставить символы с таблицей массивов.
Эта фаза бомбы занимает строку длиной 6. Я знаю, что 6 символов, которые использует программа, нужно добавить к строке 0x24 ‹+53>.
Итак, если я введу что-то вроде tttttt, значение ascii которого равно 116 или 01110100, и если вы получите последние 4 двоичных числа, оно будет равно 4. Таким образом, 4 * 6 символов = 0x24 или 36 в десятичном виде.
Я все еще очень смущен тем, как его отобразить. может кто-нибудь помочь мне решить это. Или покажите мне, как это сделать.
Спасибо
Dump of assembler code for function phase_5:
0x0000000000401123 <+0>: push %rbx
0x0000000000401124 <+1>: mov %rdi,%rbx
0x0000000000401127 <+4>: callq 0x401361 <string_length>
0x000000000040112c <+9>: cmp $0x6,%eax
0x000000000040112f <+12>: je 0x401136 <phase_5+19>
0x0000000000401131 <+14>: callq 0x4015e4 <explode_bomb>
0x0000000000401136 <+19>: mov $0x0,%eax
0x000000000040113b <+24>: mov $0x0,%edx
0x0000000000401140 <+29>: movzbl (%rbx,%rax,1),%ecx
0x0000000000401144 <+33>: and $0xf,%ecx
=> 0x0000000000401147 <+36>: add 0x4025e0(,%rcx,4),%edx
0x000000000040114e <+43>: add $0x1,%rax
0x0000000000401152 <+47>: cmp $0x6,%rax
0x0000000000401156 <+51>: jne 0x401140 <phase_5+29>
0x0000000000401158 <+53>: cmp $0x24,%edx
0x000000000040115b <+56>: je 0x401162 <phase_5+63>
0x000000000040115d <+58>: callq 0x4015e4 <explode_bomb>
0x0000000000401162 <+63>: pop %rbx
0x0000000000401163 <+64>: retq
End of assembler dump.
(gdb) x/16 0x4025e0
0x4025e0 <array.3161>: 2 10 6 1
0x4025f0 <array.3161+16>: 12 16 9 3
0x402600 <array.3161+32>: 4 7 14 5
0x402610 <array.3161+48>: 11 8 15 13
0x24
, поэтому выберите любые 6 чисел из таблицы, которые в сумме дают0x24
, затем для каждого индекса выберите любой символ ascii с соответствующими младшими битами. - person Jester   schedule 18.05.2017