Asm/minilibc (Tech 2)
But du projet : Ecrire une mini librairie C en assembleur pour NetBSD.
Description du projet :
Il s’agit d’écrire une mini librairie C (de préférence dynamique) en assembleur pour NetBSD sous IA32 en utilisant as(1).
Pour cela, les noms des fonctions du système doivent être utilisés. Il faut s’arranger pour remplacer la librairie native. Dans le cas contraire, les noms des fonctions seront préfixés par asm_.
Aspects techniques :
Voici la liste des fonctions à réaliser :
Fonctions obligatoires :
Les fonctions suivantes sont nécessaires pour avoir la moyenne :
- memset(3) : Remplit une zone de mémoire avec un octet donné.
- strlen(3) : Calcule la longueur d’une chaîne de caractères.
- memchr(3) : Recherche un caractère dans une zone mémoire.
- strchr(3) : Recherche un caractère dans une chaîne.
- strcpy(3) : Copie une chaîne.
Fonctions recommandées :
Ces fonctions sont nécessaires pour avoir 16 (il faudra aussi faire un seul parcours de chaîne pour la fonction strrchr(3) afin d’avoir la totalité des points).
- strrchr(3) : Recherche un caractère dans une chaîne.
- strcspn(3) : Recherche un ensemble de caractères dans une chaîne.
- strncmp(3) : Compare deux chaînes.
Fonctions suggérées :
Ces fonctions sont nécessaires pour avoir 20 :
- dispatch (fonction décrite plus bas).
- alloca(3) : Alloc de la mémoire
- setjmp(3) : Sauve le contexte de pile pour un saut non-local.
- longjmp(3) : Saut non-local vers un contexte de pile sauvegardé.
Pour la fonction dispatch : retval dispatch(retval (*function) (...) , ...);
Cette fonction prend en paramètre un pointeur sur fonction. Elle appellera cette fonction avec les paramètres suivants de dispatch et renverra la valeur de retour de cette fonction. En résumé dispatch(otherfunc, arguments) se comporte comme otherfunc(arguments).
Ce mini projet, qui est à réaliser à deux, permet aux étudiants de deuxième année de s’initier au langage assembleur. Ces bases leurs seront utiles pour réaliser en Tech 3 le projet ftrace : un traceur d’appels de fonctions pour Unix.