J'ai donc quelques problèmes avec ce code d'assemblage et de trouver les deux chiffres qui sont les réponses. Tout ce que je sais, c'est que l'entrée est supposée être à deux chiffres séparés par un espace et sur la base de la dernière comparaison, le dernier chiffre devrait être égal à 0x6b qui est 107 en décimal. Func4 fait quelque chose à la valeur d'eax pour le rendre 107 mais je ne suis pas vraiment sûr. Alors, quels sont les deux nombres qui seront pris en entrée? Toute aide serait appréciée.Binary Bomb Phase 4, Intervention dans l'appel func4
0x000000000040135a <+0>: sub $0x18,%rsp
0x000000000040135e <+4>: lea 0x8(%rsp),%rcx
0x0000000000401363 <+9>: lea 0xc(%rsp),%rdx
0x0000000000401368 <+14>: mov $0x402e78,%esi
0x000000000040136d <+19>: mov $0x0,%eax
0x0000000000401372 <+24>: callq 0x400d60 <[email protected]>
0x0000000000401377 <+29>: cmp $0x2,%eax
0x000000000040137a <+32>: jne 0x40138a <phase_4+48>
0x000000000040137c <+34>: mov 0xc(%rsp),%eax
0x0000000000401380 <+38>: cmp $0x13,%eax
0x0000000000401383 <+41>: jle 0x40138a <phase_4+48>
0x0000000000401385 <+43>: cmp $0x23,%eax
0x0000000000401388 <+46>: jle 0x401395 <phase_4+59>
0x000000000040138a <+48>: mov $0x0,%eax
0x000000000040138f <+53>: callq *0x20340b(%rip) <explode_bomb>
0x0000000000401395 <+59>: mov $0x23,%edx
0x000000000040139a <+64>: mov $0x0,%esi
0x000000000040139f <+69>: mov 0xc(%rsp),%edi
0x00000000004013a3 <+73>: callq 0x4010bc <func4>
0x00000000004013a8 <+78>: cmp $0x6b,%eax
0x00000000004013ab <+81>: jne 0x4013b4 <phase_4+90>
0x00000000004013ad <+83>: cmpl $0x6b,0x8(%rsp)
0x00000000004013b2 <+88>: je 0x4013bf <phase_4+101>
0x00000000004013b4 <+90>: mov $0x0,%eax
0x00000000004013b9 <+95>: callq *0x2033e1(%rip) <explode_bomb>
0x00000000004013bf <+101>: add $0x18,%rsp
0x00000000004013c3 <+105>: retq
pas dans FUNC4
0x00000000004010bc <+0>: push %rbx
0x00000000004010bd <+1>: mov %edx,%eax
0x00000000004010bf <+3>: sub %esi,%eax
0x00000000004010c1 <+5>: mov %eax,%ebx
0x00000000004010c3 <+7>: shr $0x1f,%ebx
0x00000000004010c6 <+10>: lea (%rbx,%rax,1),%eax
0x00000000004010c9 <+13>: sar %eax
0x00000000004010cb <+15>: lea (%rax,%rsi,1),%ebx
0x00000000004010ce <+18>: cmp %edi,%ebx
0x00000000004010d0 <+20>: jle 0x4010de <func4+34>
0x00000000004010d2 <+22>: lea -0x1(%rbx),%edx
0x00000000004010d5 <+25>: callq 0x4010bc <func4>
0x00000000004010da <+30>: add %eax,%ebx
0x00000000004010dc <+32>: jmp 0x4010ec <func4+48>
0x00000000004010de <+34>: cmp %edi,%ebx
0x00000000004010e0 <+36>: jge 0x4010ec <func4+48>
0x00000000004010e2 <+38>: lea 0x1(%rbx),%esi
0x00000000004010e5 <+41>: callq 0x4010bc <func4>
0x00000000004010ea <+46>: add %eax,%ebx
0x00000000004010ec <+48>: mov %ebx,%eax
0x00000000004010ee <+50>: pop %rbx
0x00000000004010ef <+51>: retq
Pourquoi n'utilisez-vous pas gdb pour parcourir les instructions de montage? Utilisez le mode tib gdb et enregistrez les vues pour vous aider à regarder dans les registres tout en parcourant les instructions d'assemblage. – AmeyaVS
Quelle est exactement votre question? –
@AmeyaVS, j'ai essayé plusieurs fois mais je ne vois pas ce qui se passe avec la valeur de% eax dans func4. – user181421