Понимание Bomb Lab Phase 5 (два целых ввода) - PullRequest
0 голосов
/ 05 апреля 2020

В настоящее время я застрял в фазе 5 лаборатории бомб. Моя фаза 5 отличается от большинства других фаз 5, которые я нашел в Интернете, так как ввод двух целых чисел. Вот код сборки:

   0x0000555555555536 <+0>:     sub    $0x18,%rsp
   0x000055555555553a <+4>:     mov    %fs:0x28,%rax
   0x0000555555555543 <+13>:    mov    %rax,0x8(%rsp)
   0x0000555555555548 <+18>:    xor    %eax,%eax
   0x000055555555554a <+20>:    lea    0x4(%rsp),%rcx
   0x000055555555554f <+25>:    mov    %rsp,%rdx
   0x0000555555555552 <+28>:    lea    0x1914(%rip),%rsi        # 0x555555556e6d
   0x0000555555555559 <+35>:    callq  0x555555554f60 <__isoc99_sscanf@plt>
   0x000055555555555e <+40>:    cmp    $0x1,%eax
   0x0000555555555561 <+43>:    jle    0x5555555555bd <phase_5+135>
   0x0000555555555563 <+45>:    mov    (%rsp),%eax
   0x0000555555555566 <+48>:    and    $0xf,%eax
   0x0000555555555569 <+51>:    mov    %eax,(%rsp)
   0x000055555555556c <+54>:    cmp    $0xf,%eax
   0x000055555555556f <+57>:    je     0x5555555555a3 <phase_5+109>
   0x0000555555555571 <+59>:    mov    $0x0,%ecx
   0x0000555555555576 <+64>:    mov    $0x0,%edx
   0x000055555555557b <+69>:    lea    0x165e(%rip),%rsi        # 0x555555556be0 <array.3418>
   0x0000555555555582 <+76>:    add    $0x1,%edx
   0x0000555555555585 <+79>:    cltq   
   0x0000555555555587 <+81>:    mov    (%rsi,%rax,4),%eax
   0x000055555555558a <+84>:    add    %eax,%ecx
   0x000055555555558c <+86>:    cmp    $0xf,%eax
   0x000055555555558f <+89>:    jne    0x555555555582 <phase_5+76>
   0x0000555555555591 <+91>:    movl   $0xf,(%rsp)
   0x0000555555555598 <+98>:    cmp    $0xf,%edx
   0x000055555555559b <+101>:   jne    0x5555555555a3 <phase_5+109>
   0x000055555555559d <+103>:   cmp    %ecx,0x4(%rsp)
   0x00005555555555a1 <+107>:   je     0x5555555555a8 <phase_5+114>
   0x00005555555555a3 <+109>:   callq  0x555555555b25 <explode_bomb>
   0x00005555555555a8 <+114>:   mov    0x8(%rsp),%rax
   0x00005555555555ad <+119>:   xor    %fs:0x28,%rax
   0x00005555555555b6 <+128>:   jne    0x5555555555c4 <phase_5+142>
   0x00005555555555b8 <+130>:   add    $0x18,%rsp
   0x00005555555555bc <+134>:   retq   
   0x00005555555555bd <+135>:   callq  0x555555555b25 <explode_bomb>
   0x00005555555555c2 <+140>:   jmp    0x555555555563 <phase_5+45>
   0x00005555555555c4 <+142>:   callq  0x555555554ec0 <__stack_chk_fail@plt>

Список чисел, который я ввел, таков:

enter image description here

Так далеко от Насколько я понимаю, должны быть выполнены два условия:

  1. edx должно быть равно 0xf, то есть первый вход должен быть 5, 21, 37 и т. д. c. (Добавляйте 16 каждый раз)
  2. ecx сравнивается с rsp, то есть 15, поэтому нам нужно, чтобы ecx равнялся 15

Что я знаю до сих пор:

  1. первый вход не может быть 15, 31, 47 и т. Д. c.
  2. Изменение второго входа не влияет на ecx
  3. Первый вход напрямую связан с edx

Вопросы:

  1. Где используется второй вход?
  2. Правда ли, что первый вход должен быть 5, 21, 37 и т. Д. c ?
...