Solution de U03 pour Comparaison

intro hardware

11 janvier 2025

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