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
syscallFormat du flag : StarHack{résultat}
Solution
Il "suffit" de suivre les instructions, on commence par _start :
On place la valeur d'
input(5) dansal.xor bl, blpermet de mettre le registreblà0On copie la valeur de
alverscl. cl vaut donc5.
Ensuite on passe à loop_start :
si
cl== 0, on jump àloop_endsinon on ajoute la valeur de
clàbl(qui était à 0 de base)on décrémente
clon 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.
Mis à jour