corewar
Présentation par Loïc BRANSTETT et Lucas GOETZ
Le 24/05/2019
Sommaire
- Présentation du projet
- Organisation
- Architecture
- Tests automatisés
- Conclusion
- Questions ?
Présentation du projet
corewar est "Back in the good old days..."
Présentation du projet
.name "Bill"
.comment "Equilibre"
sti r1, %:live, %1
fork %:ok
ld %100, r4
ld %2, r5
live: live %1
ok:
sti r5, r4, r1
add r4, r5, r4
ld %0, r8
zjmp %:live
asm
vm
.cor
00 ea 83 f3 41 62 65 6c 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
00 00 00 00 00 00 00 00 00 00 00 16 4c 27 61 6d
65 72 20 6e 6f 69 72 2e 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
*
0b 68 01 00 07 00 01 01 00 00 00 ea 02 90 00 00
00 00 03 09 ff f4
Organisation - asm
- Trello - Entraide entre groupes
Organisation - vm
Architecture - asm
Traitement des arguments
Récupération des lignes du fichier
Transformation des lignes en listes de mots
Initialisation
Écriture des commandes
Détection des commandes
Libération de la mémoire et fermeture du programme
Récupération du header
Calcul des tailles (label) et gestion d'erreurs
Architecture - asm
/* STRUCTS */
typedef struct sstring_s {
char delimiter;
char *value;
struct sstring_s *back;
struct sstring_s *next;
} sstring_t;
typedef struct sfile_s {
sstring_t *line;
int index;
struct sfile_s *back;
struct sfile_s *next;
} sfile_t;
typedef struct label_s {
char *name;
int index;
struct label_s *back;
struct label_s *next;
} label_t;
int asm_reverse_int(int val)
{
int b0 = (val & 0x000000ff) << 24u;
int b1 = (val & 0x0000ff00) << 8u;
int b2 = (val & 0x00ff0000) >> 8u;
int b3 = (val & 0xff000000) >> 24u;
return (b0 | b1 | b2 | b3);
}
short asm_reverse_short(short val)
{
int b1 = (val & 0x00ff) << 8u;
int b2 = (val & 0xff00) >> 8u;
return (b1 | b2);
}
Librairies:
- libgnl (from get_next_line)
- libmy (from cpool)
- sstring (from minishell1)
- sfile (from minishell2)
Architecture - asm
Opération a bits:
- & (AND)
- | (OR)
- << (Left-to-left)
- >> (Right-to-right)
Architecture - vm
Parsing des arguments
Gestion d'erreurs
Création du champ de bataille
Initialisation
Pose des héros
Bataille
Tests automatisés
#!/usr/bin/bash
valgrind --leak-check=full ./asm ~/Téléchargements/Corewar/champions/src/$1.s &&
diff -s $1.cor ~/Téléchargements/Corewar/champions/$1.cor || (
echo "My: $1.cor:" &&
hexdump -C $1.cor &&
echo "Legacy: $1.cor:" &&
hexdump -C ~/Téléchargements/Corewar/champions/$1.cor
)
42.s
abel.s
bigseek.s
bill.s
champ.s
chicken.s
error.s
fluttershy.s
fork.s
helltrain.s
jumper.s
lde.s
mach.s
mortel.s
pdd.s
skynet.s
terminator.s
try_again.s
turtle.s
tyron.s
Conclusion
- Aucun bonus
- Difficultés:
- Le sujet
- Les explications
- Index / Non index
asm
vm
- Aucun bonus
- Difficultés:
- Le sujet
- L'organisation
Questions ?
FIN
corewar
By urgau-1
corewar
- 94