Il nous est demandé d’écrire un programme assembleur comparant R5 et R6 et renvoyant 1 si les valeurs sont différentes et 0 si elles sont égales.
Le programme assembleur est le suivant :
; On positionne R0 à 0 pour le cas où la comparaison qui va suivre inbdique une
;
MOV R0,#0
; Comparaison entre R5 et R6
;
CMP R5,R6
; Si les valeurs sont égales on saute l'instruction MOV R0,#1 qui indique que les valeurs sont différentes
;
JZA egaux
MOV R0,#1
egaux:
; Fin du programme
;
STP
Nous utilisons le script suivant pour synchroniser les opérations et réaliser notre test, nous utilisons commande nc
pour attendre le temps nécessaire pour laisser au container le temps de démarrer :
#!/bin/bash
set -e
if [ ! -f docker-compose.yml ]; then
wget https://hackropole.fr/challenges/fcsc2023-hardware-asm-comparaison/docker-compose.public.yml -O docker-compose.yml
fi
if [ ! -f assembly.py ]; then
wget https://hackropole.fr/challenges/fcsc2023-hardware-asm-comparaison/public/assembly.py -O assembly.py
fi
if [ ! -f challenge.py ]; then
wget https://hackropole.fr/challenges/fcsc2023-hardware-asm-comparaison/public/challenge.py -O challenge.py
fi
if [ ! -f docker-compose.yml ]; then
wget https://hackropole.fr/challenges/fcsc2023-hardware-asm-comparaison/public/machine.py -O machine.py
fi
docker-compose up -d
while ! nc -z localhost 4000; do sleep 1; done
python3 assembly.py 013_Comparaison.asm | nc localhost 4000
docker-compose down
Le résultat est le suivant :
Creating network "013_comparaison_default" with the default driver
Creating 013_comparaison_comparaison_1 ... done
Enter your bytecode in hexadecimal:
>>> [+] Congrats! Here is the flag: FCSC{xxxxxxxx}
Stopping 013_comparaison_comparaison_1 ... done
Removing 013_comparaison_comparaison_1 ... done
Removing network 013_comparaison_default