Assembly

Flag: StarHack{15}

Challenge

Description


Rétro-analysez le code assembleur fourni pour déterminer :

Que calcule le programme ?

Quel est le résultat final stocké dans result pour l'entrée donnée ?

section .data

    input db 5  



section .bss

    result resb 1



section .text

    global _start



_start:

    mov al, [input] 

    xor bl, bl 

    mov cl, al



loop_start:

    cmp cl, 0 

    je loop_end

    add bl, cl

    dec cl 

    jmp loop_start 



loop_end:

    mov [result], bl 



    ; Prepare to exit

    mov eax, 60   

    xor edi, edi   

    syscall

Format du flag : StarHack{résultat}

Solution

Il "suffit" de suivre les instructions, on commence par _start :

  • On place la valeur d'input (5) dans al.

  • xor bl, bl permet de mettre le registre bl à 0

  • On copie la valeur de al vers cl. cl vaut donc 5.

Ensuite on passe à loop_start :

  • si cl == 0, on jump à loop_end

  • sinon on ajoute la valeur de cl à bl (qui était à 0 de base)

  • on décrémente cl

  • on revient au début de la loop

Enfin, quand on sort de loop_start, on arrive à loop_end où l'on copie la valeur de bl dans result

bl aura donc la valeur 5 + 4 + 3 + 2 + 1, soit 15.

Dernière mise à jour

Cet article vous a-t-il été utile ?