corewar

Présentation par Loïc BRANSTETT et Lucas GOETZ

Le 24/05/2019

Sommaire

  1. Présentation du projet
  2. Organisation
  3. Architecture
  4. Tests automatisés
  5. Conclusion
  6. 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

  • 97