Home

UNIVERSITÉ DU QUÉBEC MÉMOIRE PRÉSENTÉ À

image

Contents

1. L exemple de la Figure 4 7 sera compl t par ces deux lignes de codes qui repr senteront les affectations da la structure S1 son l ment correspondant et inversement sl gt ptr_info InfPtrl lere afectation InfPtrl gt ptr liste sl 2eme affectation d Initialisation des informations accompagnant toute allocation La m thode NewPreparePtr est appel e Elle se chargera d initialiser les informations que chaque pointeur est sens avoir et son prototype serait comme suit void NewPreparePtr InfoPointeur info size t size const char nom_fich unsigned long num ligne Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 64 de m moire bas sur la programmation par aspect AspectC Debogger Si on continue dans le m me exemple de la Figure 4 7 les informations du pointeur Jnfptrl seront initialis es et prendront les valeurs suivantes Infptrl gt nbr_magique MALLOC_NBR_MAGIQUE Infptri gt est_alloue true Infptri gt taille size Infptri gt nom_fich nom_fich Infptrl gt num ligne num ligne Infptr1 gt somme info MallocCalculeSomme Infptr1 calcule la somme des information de Infptrl e Initialisation du Tampon _Overflow Afin de d tecter les erreurs d overflow on a opt pour une m thode tr s simple et d j utilis e dans le domaine du g nie logiciel On alloue quelques octets en plus on les initialise et enfin on v rif
2. a Extraction du pointeur retourn par l op rateur new La m thode result retourne un pointeur vers l emplacement m moire d sign par la valeur r sultat 0 si la fonction ne retourne aucune valeur Dans notre cas on utilisera cette m thode pour passer en param tre l adresse de chaque espace m moire que l op rateur new allouera Cette m thode est accessible travers l objet tjp ThisJoinPoint elle est de type joinpoint et elle est toujours disponible m me dans un code conseil b Extraction du nom de fichier et du num ro de ligne L utilisation des variables _ FILE et LINE lors de la red finition du comportement de l op rateur new nous permet de d tecter le nom du fichier et le num ro de la ligne o l allocation de la m moire s est produite Le tout est impl ment dans la portion d un code slice classe L op rateur new prendra donc deux arguments en plus de l argument Size Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 62 de m moire bas sur la programmation par aspect AspectC Debogger advice classes slice class NewFileLine public void operatornew size t size constchar nom fich const unsigned long num ligne throw std bad_alloc define new new _FILE _ DINE NewSecurise fera appel une premi re m thode afin de lier toute allocation dynamique son l ment correspondant du conteneur et une deuxi me m thode qui se
3. R E Jones and R Lins Garbage Collection Algorithms for Automatic Dynamic Memory Management Wiley 1996 G Kicsales J Lamping A Mendhekar C Maeda C Lopes J Loingtier and J Irwin Aspect oriented programming Technical Report SPL97 008 P9710042 XEROX PARC February 1997 B W Kernighan et D M Ritchie The C Programming Language Ansi C Edition Prentice Hall 1988 Y Levanoni et E Petrank An on the fly Reference Counting Garbage Collector for Java Proceedings of the 16th ACM SIGPLAN conference on Object oriented programming systems languages and applications Volume 36 Issue 11 October 2001 N Loriant volution dynamique des syst mes d exploitation une approche par la programmation par aspect l cole Nationale Sup rieure des Techniques Industrielles et des Mines de Nantes d cembre 2007 http www128 ibm com developerworks library j aspectj 2002 Linux Online Inc Linux Online http www linux org Fabrice Marguerie How to detect and avoid memory and resources leaks in NET applications September 2009 Bertrand Meyer Object oriented Software Construction Prentice Hall 1988 N Metropolis J Howlett and Gian Carlo Rota editors A History of Computing in the Twentieth Century Academic Press 1980 Bertrand Meyer Object oriented Software Construction Prentice Hall 1988 H Mcheick Distributions d objets avec les techniques de d veloppement orient es aspect
4. L acc s l gal une zone m moire inappropri e constitue une limite importante pour Purify D une bonne flexibilit de la manipulation des pointeurs au sein des programmes crits en C C un pointeur pourrait accidentellement acc der un bloc de m moire l galement allou e mais qui se trouve au del des limites du bloc de m moire vis Dans ce cas Purify ne signale aucun acc s ill gal vu que cette zone m moire est correctement allou e et initialis e Purify Overview 1999 Purify User s Guide 1999 Pour une meilleure compr hension de la probl matique nous allons illustrer un simple exemple d un acc s l gal une zone m moire inappropri e et ensuite donner notre solution dans le Chapitre 4 Supposons que lors de chaque allocation dynamique pour une donn e quelconque nous effectuons deux allocations suppl mentaires i un espace m moire de la taille d une structure InfoPointeur afin de contenir certaines informations concernant l allocation et i un espace m moire gal 16 octets pour d ventuels tests d overflow Nous obtenons donc trois espaces m moire adjacents La Figure 2 7 illustre l adjacence des espaces m moire allou s Data 1 InfoPointer 2 Tampon anti Overflow 3 Info char ptr 2 Info char ptr 1 Info char ptr Figure 2 7 Disposition des espaces m moire 20 Chapitre 2 Gestion de la m moire un tat de l art 21 La Figure 2 8 n
5. Retona Purity EOR TTI File Edt View Settings Window Help 6668 Starting Purify d C temp HelloWVorld Debug HelloWorld exe at 04 Starting main ABR Array bounds read in printf 1 occurrence IPV Invalid pointer write in main 1 occurrence ET C temp HelloWorlc Run 04 277 id Summary of all memory in use 25995 bytes 42 blocks amp Summary of all memory leaks 92 bytes 2 blocks E o Summary of all handles in use 5 occurrences Exiting with code 0 0x00000000 Program terminated at 04 27 2005 22 33 18 4 Displayed Errors 2 of 2 Displayed Warnings 30f3 Bytes leaked 92 0 Figure 2 10 Capture d cran du r sum des erreurs de DebugTest IBM Software 2003 Chapitre 2 Gestion de la m moire un tat de Part 25 Le r sum d erreurs peut galement tre rallong afin d indiquer plus de d tails au sujet de l emplacement d une erreur voir la Figure 2 11 Si le code source est disponible le chemin de pile est augment et l endroit exact de la violation de m moire peut tre r v l Le principal probl me rencontr durant l utilisation de Purify est le bogue engendr lors de son int gration avec l IDE utilis tout le long de notre travail de recherche Microsoft Visual Studio 2005 Une fen tre a t affich e signalant l erreur suivante Microsoft Development Environment cannot shut down because a modal dialog is active Close the active dialo
6. include lt stdio h gt include lt stdlib h gt include lt stdarg h gt typedef struct InfoMalloc unsigned long nbr_magique Nombre magique bool est_alloue Pointeur allou cu lib r size_t taille d allou e sans ces informatio int nom_fich Nom du fichier source unsigned long num_ligne Ligne du fichier struct PtrChaineMalloc ptr_liste Pointeur dans la liste unsigned long somme_info Somme des informations checksum Annexe 95 Conteneur liste des pointeurs allou es Un pointeur cha n typedef struct PtrChaineMalloc struct PtrChaineMalloc precedent f El ment suivant struct PtrChaineMalloc suivant l ment suivant unsigned long nbr_magique magique InfoMalloc ptr_info xe iteur lib rer typedef struct CM struct PtrChaineMalloc debut f f Point struct PtrChaineMalloc fin Pointeur vers le dernier l ment class Conteneur public CM ConteneurMalloc unsigned int GlobalUsedMemory unsigned int MemoryStillAllocated unsigned int PointerNumber Conteneur Conteneur ConteneurMalloc debut NULL ConteneurMalloc fin NULL GlobalUsedMemory 0 MemoryStillAllocated 0 PointerNumber 0 criture en dehors de la zone a anti overflow d un pointeur ptr pointe sur ies infos bogage InfoMailoc void Malloc_PrepareOverflow InfoMalloc info V rifie la tampon anti overflow renvoie true s il n a pas t touch false s
7. une zone m moire inappropri e s s s 78 Figure 5 8 Erreur de d passement de tampon dans d3dfile cpp i eescccssesessecesescneenseeenevoneens 80 Figure 5 9 Injection d un test dans dde Chiesa rec niinuess 80 vii Liste de tableaux Tableau 5 1 R sultat de d tection des fuites de m moire 76 Tableau 5 2 R sultat de d tection des erreurs d acc s ss 78 Tableau 5 3 R sultat de d tection des d passements de tampon 79 Tableau 5 4 Tableau r capitulatif de l tude de cas de Purify et d AspectC Debogger 84 viii ma m re que Dieu lui accorde Sa mis ricorde A mon p re Mouna ma s ur Dali mon fr re Maryouma et mes ni ces A mes ami e s ix Remerciements Au nom de Dieu le Cl ment le Mis ricordieux Je remercie tout d abord Dieu qui m a donn le courage et la force de r aliser ce m moire et qui a exauc mes pri res en me donnant la chance de pouvoir vous le remettre aujourd hui Je d die ce m moire ma ch re et regrett e m re Moufida Maalej paix son me et que Dieu lui accorde Sa mis ricorde et l accepte dans ses Paradis Je remercie mon p re Monji Dhiab un Homme qui a toujours t pr sent pour sa famille bon modeste et qui m a toujours fais confiance Les sacrifices que tu as fais mon gard sont inestimables Je prie Dieu pour que je puisse t apporter main forte et tre la hauteur de tes esp rances Je t aime papa Je remercie Mouna un
8. Lors de l appel d un objet celui ci est initialis en m moire centrale et occupera un espace m moire qui correspondra sa taille Une fois l application finie ce m me objet devenu inutile devra tre d truit afin que l espace m moire utilis soit r cup r On parle tout simplement de gestion de la m moire De cette mani re on fait en sorte que des objets ou des variables qui ne sont plus d aucune utilit n occupent pas un espace m moire qui pourrait tre utile pour d autres objets ou variables Metropolis ef al 1980 Le principe m me de cycle de vie d une variable ou d un objet est fond sur le fait que toute cr ation finit par une destruction sinon le cycle serait incomplet Bray 1977 Le fait qu un objet ne soit plus sous le contr le d une application et qu il ne soit pas encore lib r repr sente un gaspillage au niveau de l espace m moire Cette forme de gaspillage appel e fuite de m moire Hirzel et al 2002 est une erreur que la plupart de langages de programmation voire la totalit ont essay d en venir bout Dans le domaine de la gestion de la m moire nous distinguons deux t ches connexes une tape d allocation de la m moire cr ation et une autre de d sallocation destruction ou lib ration La premi re se r sume au fait d allouer ou de r server de la m moire pour des objets des variables ou encore des structures de donn es et la seconde s occupe d
9. criture d une plus longue cha ne de caract res qui d passerait la fin du tampon A pourrait causer une erreur de segmentation qui mettrait fin au processus 16 Chapitre 2 Gestion de la m moire un tat de l art 2 2 Les d bogueurs de m moire dynamiques 2 2 1 Introduction Les erreurs d acc s et les fuites de m moire sont des erreurs faciles introduire dans un programme mais difficiles liminer Tlili 2009 N ayant aucune facilit pour d tecter les erreurs d acc s un programmeur peut tre pouss r cup rer les fuites de m moire de fa on brusque causant des comportements impr visibles Inversement sans une r percussion des fuites de m moire les programmeurs peuvent gaspiller de la m moire en r duisant au minimum les appels de lib ration dans le but d viter les erreurs d acc s lors d une lib ration d une zone m moire Par cons quent les programmeurs accordent plus d importance aux acc s et fuites de m moire afin d am liorer la robustesse et la performance de leurs programmes IBM Software 2003 En effet quelques erreurs d acc s de m moire sont d tectables statiquement par exemple l affectation d un pointeur une variable de type short Dans d autres cas les erreurs ne peuvent tre d tect es que lors de l ex cution du programme par exemple l criture au del de la limite d un tableau dynamique Aussi il existe des erreurs de frappes qui so
10. l aide de la m thode Spawn voir la ligne 8 de la Figure 5 7 Si on essaye de traiter de la m me fa on l ast ro de numMaterials du tableau pMaterials une erreur d acc s l gal une zone m moire inappropri e fait surface En effet la case pMaterials numMaterials 1 existe mais ne peut tre trait e par la classe explosion vu que son ast ro de correspondant n a pas encore explos D3DMATERIAL8 m_pMaterials Allocation dynamique du tabelau m_pMaterials pMaterials D3DXMATERIAL pbufMaterials gt GetBufferPointer for unsigned int i 0 i lt numMaterials i if D3DXCreateTextureFromFile m_pd3dDevice pMaterials i gt explosion amp ppTextures i traitement des ast roides explos s par la classe explosion pMaterials i gt explosion gt Spawn spaceship gt getPosition 20 true 1 asteroide numMaterials 1 est trait par la classe explosion sans avoir explos on signale une erreur pMaterials numMaterials 1 gt explosion gt Spawn spaceship gt getPosition 20 true Figure 5 7 Cas d une erreur d un acc s l gal une zone m moire inappropri e Le langage C permet une grande flexibilit lors de la manipulation des pointeurs Ce type d avantage constitue une grande limite pour l outil Purify qui a t dans l incapacit de d tecter l erreur inject e Par contre la structuration m me d AspectC Debogger constitue une solution cette
11. s n ligne blu FILE _ LINE printf n changement de l op rateur new return malloc s aspect NewSecuriseAspect void ptr int d FILE F3 Annexe 99 advice classes ise on de memoire afin de s assurer qu aucune autre tion n est en place eviter les conflits slice class newdelete public Assure que loperateur new n a pas ete redefinit sinon le garbage collection ne peu fonctionner void operator new size t size printf CARE I RII ke e ER I he ke e e de ae a a k ke a IF printf s n ligne lu FILE _ LINE printf n changelment de l op rateur new return malloc size void operator newl size_t s printf CUA RRR RRR RR fff PRR KKK RR KR kekk RM printf s n ligne lu __FILE_ _ DINE_ printf n changement de l op rateur new return malloc s advice execution Wg before printf executing heap operation s n JoinPoint signature QO printf tip gt that is s should be 0 n tjp gt that not ON endif NewSecurise aspect ChronoAspect ah ifndef TESTASPECT define TESTASPECT include lt stdio h gt include lt iostream gt include lt string h gt include lt stdlib h gt include lt stdarg h gt include chrono h aspect ChronoAspect Chrono h public Annexe 100 advice execution main before informations a la
12. sont utilis s en tant que caract res de remplacement Le signe pourcentage fait r f rence n importe quel type Par exemple correspond tous types de pointeur ainsi qu n importe quelle s quence de caract res dans les identifiants Aussi Affiche_ correspond l ensemble des classes dot es d un nom commen ant par Affiche_ Les points de suspension quivalent n importe quelle s quence de types ou des espaces de nommage Par exemple float Racine quivaut n importe quelle fonction g n rale charg e de 2 retourner un r el et nomm e Racine Enfin l expression de correspondance ae quivaut n importe quelle classe ou espace de nommage Quick Reference 2006 Spinczyk et al 2005 Les expressions de correspondance repr sentent des ensembles d entit s de programme nomm es comme les fonctions ou les classes Ainsi les expressions de correspondance sont toujours des expressions de coupes transverses primitives charg es de d crire un ensemble de points de jonction dans la structure statique du programme et sont appel es points de jonction statiques Toutefois dans l exemple de la Figure 3 3 nous visons une m thode d aspect pour Chapitre 3 Pr occupations et aspects 43 d crire un v nement dans le flux dynamique de contr le du programme savoir l ex cution des fonctions La fonction de coupe transverse execution es
13. Allocation de m moire pour le tableau m_pTextures de texture D3DXMATERIAL d3dxMtris D3DXMATERIAL pMtrlBuffer gt GetBufferPointer m_pTextures new D3DMATERIAL8 m_dwNumMaterials if d3dxMtri1s i pTextureFilename Cr ation d une texture TCHAR strTexture MAX_PATH TCHAR strTextureTemp MAX_PATH DXUtil ConvertAnsiStringToGeneric strTextureTemp d3dxMtrls i pTextureFilename DXUtil_FindMediaFile strTexture strTextureTemp Affectation de la structure dans le tableau m_pTextures D3DXCreateTextureFromFile pd3dDevice strTexture amp m_pTextures i Figure 5 8 Erreur de d passement de tampon dans d3dfile cpp Afin de nous assurer que notre raisonnement est juste nous nous sommes propos s pour r soudre cette erreur de d passement de tampon et avons modifi le code source de la classe d3dfile if d3dxMtrls i pTextureFilename Cr ation d une texture TCHAR strTexture MAX_PATH TCHAR strTextureTemp MAX_PATH DXUtil_ConvertAnsiStringToGeneric strTextureTemp d3dxMtrls i pTextureFilename DXUtil FindMediaFile strTexture strTextureTemp Affectaion de la structure dans le tableau m pTextures si l affecation choue la case i du tableau m_pTextures est mise a NULL if FAILED D3DXCreateTextureFromFile pd3dDevice strTexture amp m_pTextures i m_pTextures i NULL Figure 5 9 Injection d un test dans d3dfile cpp Chapitre 5 Etude
14. S m moire util m moire util InfoPointeur gt taille Figure 4 7 D claration d un aspect avec acc s une variable contextuelle La d claration du conseil rapport la Figure 4 6 contient un param tre formel de type size_t ce type de d claration lie l ex cution du conseil en question celui du point de jointure d crit dans la coupe transverse NEW de la Section 4 3 2 1 Ainsi le param tre size_t que l op rateur new a pris comme argument au sein de l application cliente devient utilisable dans le code du conseil autant qu un param tre d une fonction ordinaire et une transmission de la taille de l espace allou au champ nfoPointeur gt taille devient possible Enfin pour calculer l espace m moire qu une application cliente consomme dynamiquement tout au long de son ex cution il suffirait de sommer la valeur InfoPointeur gt taille dans une variable de type size_t chaque fois qu une allocation dynamique est atteinte Cette variable serait un membre public de l aspect ligne 4 de la Figure 4 5 et l instruction m me de la sommation se trouvera au niveau du conseil NEW ligne 5 de la Figure 4 6 4 3 3 Aspect pour s curiser les allocations et les d sallocations de m moire 4 3 3 1 Allocation s curis e La s curisation d un espace m moire se r sume la collection des informations pertinentes concernant son allocation Ainsi lors de toute manipulation des donn es que Chapitre
15. TACO Vaysse 2005 et JAC JAC 2006 Dans ce travail de recherche nous utilisons seulement le langage C et bien videmment le compilateur d aspect AspectC Tous nos exemples et applications sont crits avec ce langage que nous approcherons de fa on plus d taill e dans la section suivante Chapitre 3 Pr occupations et aspects 41 3 3 4 Programmation par aspect avec AspectC AspectC est une extension du langage de programmation C C I a pour objectif de traduire un code source d AspectC en un code source C Le projet AspectC a d but avec un prototype issu de recherches en 2001 qui a gagn en maturit au cours des ann es De nos jours le langage AspectC est appliqu avec succ s sur un certain nombre de projets une chelle internationale aussi bien dans le domaine informatique qu acad mique Afin de pr senter AspectC nous nous baserons sur un exemple simple d aspect intitul tracing Cet exemple illustrera les l ments de base du langage comme les aspects les coupes transverses ainsi que les m thodes d aspect Notre exemple a pour but de modulariser l impl mentation des op rations de donn es de sortie qui sont utilis es afin de pister le flux de contr le du programme A chaque d marrage de l ex cution d une fonction l aspect expos ci dessous dite son nom On s inspirera de l exemple tracing afin de d velopper la Section 4 2 1 du Chapitre 4 qui p
16. a t r solue Cette derni re est du une bonne flexibilit des pointeurs qu offre le langage C Nous avons impl ment une structure qui permet la gestion des pointeurs C et qui permet d viter ce type d acc s frauduleux cf Section 4 3 3 2 e Une bonne coexistence entre une gestion implicite et explicite de la m moire a t atteinte Les deux types de gestion ne sont plus dissoci s le programmeur garde son r le de d cideur tout en tant contr l et s curis cf Section 5 4 2 e Un avancement consid rable est relev pour les tisseurs d AspectC nous avons r ussi 4 impl menter un premier d bogueur de m moire bas sur la programmation par aspect Nous proposons un outil de d bogage de m moire C ad quat analys d velopp et test Conclusion 87 AspectC Debogger a r pondu tous les crit res mis pour son valuation sauf pour le troisi me et le dernier crit re voir Chapitre 5 pour la liste des crit res En effet une instrumentation par aspect diminue consid rablement les performances de l application analys e cf Section 5 4 3 Aussi nous avons constat une instabilit du tisseur AspectC Ce dernier n a pas pu reconnaitre un nombre important de fichier d ent te et de templates C Beaucoup d erreurs de compilation ont t rencontr es cf Section 5 4 5 Un tableau r capitulant les avantages et les d savantages d AspectC Debogger est fourni la fin
17. dans une th se pr sent e la Facult des Etudes Sup rieurs 2006 H Mili J Dargham A Mili and R Godin View Programming Towards a Framework for Decentralized Development and Execution of OO Programs Proc of TOOLS USA 99 Aug 1 5 1999 Prentice Hall pp 211 221 1999 Nethercote and J Seward Valgrind A program supervision framework In Proceedings of RV 03 Boulder Colorado USA July 2003 N Nethercote and J Seward Using Valgrind to detect undefined errors with bit precision Proceedings of the USENIX Annual Technical Bibliographie Purify User s Guide 1999 Purify Overview 1999 Quick Reference 2006 Reenskaugh et al 1995 Salagnac 2004 Spinezyk O et al 2002 Sioud 2006 Stroustrup 2004 Spinczyk et al 2005 Tarr et al 1999 Tiobe Software 2009 Tlili 2009 Vassev et Paquet 2006 Valgrind 2008 Vasudevan 2000 Valgrind Manual 2008 Vaysse 2005 Paulson et Succi 2004 91 Conference 2005 IBM Rational Purify http www rational com 1999 http www agsrhichome bnl gov Controls doc purify purify_info html AspectC Quick Refernce Version 1 11 15 mars 2006 T Reenskaugh et al in Working with Objects Prentice Hall 1995 Salagnac Guillaume Gestion automatique de la m moire dynamique pour des programmes Java temps r el embarqu s Verimag et Unit Mixte de Recherche 2004 Olaf Spinczyk Andr
18. l environnement d ex cution le programmeur se lib re de cette t che La gestion manuelle de m moire est l une des sources les plus courantes d erreurs dont les trois principaux types sont i l acc s une zone m moire non allou e ou qui a t lib r e ii la lib ration d une zone m moire d j lib r e et ii la non lib ration de la m moire inutilis e fuites de m moires 11 Chapitre 2 Gestion de la m moire un tat de l art L utilisation d outils et de m thodologies appropri s permet d en r duire l impact tandis que l utilisation d un Garbage Collector permet de les liminer presque compl tement En effet les Garbage Collector n arrivent pas r soudre tous les probl mes de gestion de m moires et ceci en tenant compte des probl mes d allocations et de d sallocation par exemple les erreurs de d passement de tampon buffer overflow En effet la fonction d un Garbage Collector ne se limite pas la lib ration seulement mais aussi par son biais se fait l op ration d allocation travers une entit appel e mutateur Abdullahi et Ringwood 1998 Cette simplification de t che de gestion de m moire travers les Garbage Collector ne peut qu apporter de l aide aux programmeurs mais peut aussi pr senter quelques inconv nients principalement au niveau des performances des programmes les utilisant Des tudes montrent que dans certains cas l impl mentation d un
19. le t il les allocations de m moire statiques En plus de d tecter les erreurs d acc s de m moire dynamique Purify d tecte aussi les acc s au del des limites des donn es des variables globales et statiques les donn es allou es statiquement lors de la compilation L exemple ci dessous nous montre le cas ou des donn es sont trait es l aide d un dispositif de contr le statique int array 10 main array 10 Brreur array 10 non valide Figure 2 6 Erreur d criture hors de la limite d un tableau 19 Chapitre 2 Gestion de la m moire un tat de l art Dans l exemple de la Figure 2 6 Purify rapporte une erreur d criture hors de la limite d un tableau plus pr cis ment lors de l affectation de la valeur array 10 ABW Array Bounds Write L op ration d affectation est de 4 octets au del des limites du tableau Purify ins re des zones de garde rouges autour de chaque variable se trouvant dans le secteur des donn es statiques du programme On se r f re ces zones de garde comme des zones rouges Red Zones Si une tentative de lecture ou d criture dans une de ces zones rouges est d tect e Purify rapporte une erreur de borne d un tableau 4BR Array Bounds Read ou ABW Array Bounds Write Ces erreurs vont tre consid r es dans la Section 4 4 3 2 du Chapitre 4 c Notes et limitations de Purify par rapport aux acc s des zones m moire
20. qu elle utilise une approche d allocation dynamique des espaces m moire d di s pour ses principales ex cutions le cas des allocations statiques n est pas cart iii et enfin qu on puisse acc der au code source de cette application conna tre de pr t quoi ressemble les erreurs d tect es proc der des modifications si n cessaire et injecter d ventuelles erreurs ne peuvent que renforcer l tude de cas Pour pouvoir r unir ces exigences nous nous sommes int ress s aux logiciels Open Source En effet le principe m me de ce type de logiciels est que l utilisateur peut librement utiliser et modifier le code source Certes ce principe soul ve un d bat controvers sur la s curit et la fiabilit au sein de ce type de logiciels mais des statistiques r v lent qu apr s deux d cennies de commercialisation de logiciels fabriqu s en grande s rie Commercial Off The Shelf COTS le march connait une migration inexorable vers ces logiciels dits Libre et Open Source FOSS Tlili 2009 A date plusieurs logiciels libres sont largement disponibles et sont consid r s aussi matures et s rs que leurs quivalents COTS et ceci un faible co t ou gratuitement Paulson et Succi 2004 Paulson et Succi 2004 Apr s avoir effectu des recherches dans des sites sp cialis s dans le d veloppement d applications C Deitel 2010 nous avons trouv une application Open Source qui ob it aux normes fi
21. un Garbage Collector Malheureusement cette solution n a pas t efficace plus d un titre Afin de fournir une solution plus robuste et plus compl te les chercheurs se sont concentr s sur le d veloppement d un outil de programmation sp cialis dans la gestion de m moire le d bogueur de m moire Malgr les efforts fournis dans ce sens les d bogueurs de m moire C les plus performants admettent encore des limites et dans certains cas ne peuvent assurer une bonne gestion de la m moire Dans ce travail de ma trise nous avons propos un outil complet de gestion implicite de la m moire pour le langage C La programmation par aspect a servi de support pour l impl mentation de cet outil et avons pu centraliser la gestion de la m moire au moyen d un seul aspect Nous nous sommes inspir s des limites de d bogueurs de m moire comme Purify et Valgrind pour r viser certains choix de structuration et de conception de notre outil Et tant soutenus par la programmation par aspect nous avons pu contourner les limites du mod le de programmation par objet par exemple la dispersion du code Conclusion 86 Nous avons labor un cadre de d veloppement m thode et outil pour permettre une analyse dynamique des applications C Dans ce cadre nous avons privil gi la d tection des erreurs de gestion de m moire dynamique et avons essay de r pondre aux crit res pos s dans le premier chapitre Ayant englob
22. 1 2 Gestion implicite de la m moire Suret et s curit sont des termes que des langages de programmation orient s objet comme Java Lisps Eiffel et Modula III ont utilis pour gagner leur popularit En effet Meyer 1988 a plac la gestion automatique de la m moire en troisi me position dans les sept commandements de la programmation orient e objet Pour Meyer 1988 une gestion dynamique de la m moire via une d sallocation automatique est une m thode cl pour garantir une bonne performance des langages de programmation cet effet une entit appel e Garbage Collector ou ramasse miette est utilis e pour assurer une gestion automatique de la m moire Un Garbage Collector est un sous syst me informatique responsable du recyclage de la m moire pr alablement allou e puis inutilis e Le premier avoir utilis un Garbage Collector fut John McCarthy en 1959 afin de rem dier aux probl mes dus une gestion manuelle de la m moire au sein du premier syst me Lisp Sioud 2006 Le principe de base de la r cup ration automatique de la m moire est simple une fois les objets qui ne sont plus utilis s sont d tect s c est dire les objets qui ne sont pas r f renc s et que le programme en cours d ex cution ne pourra jamais atteindre on r cup re l espace m moire que ces derniers ont utilis Jones et Lins 1996 Abdullahi et Ringwood 1998 10 Chapitre 2 Gestion de la m moire un tat de l a
23. 2 2 4 R sultats Ci dessous se trouvent les r sultats de l ex cution de notre plan exp rimental 23 Chapitre 2 Gestion de la m moire un tat de l art 24 a Facilit e d installation Une simple recherche sur Google nous a men s directement au site officiel d IBM ainsi qu un lien de t l chargement d une version Windows de Purify Sur un simple clic la version 7 0 0 de Purify est t l charg e et ensuite install e L op ration n a demand que quelques minutes de temps Purify User s Guide 1999 Purify Overview 1999 b Facilit e d utilisation Une fois l outil install nous avons trouv son interface assez intuitive La v rification des erreurs de m moire d un programme tait tr s simple Purify affiche sur sa fen tre principale les erreurs rencontr es au fur et mesure qu il ex cute le programme client Il est important de noter que Purify n exigeait pas de modifications du code source analyser afin d aboutir un r sultat l analyse tait tout de suite disponible Il tait relativement facile de comprendre les r sultats La Figure 2 10 nous procure plus d explications Un point pouvant tre incompr hensible premi re vue est que les erreurs d tect es sont cod es en des abr viations de 3 lettres tel que ABR IPW et UMR Cependant les abr viations sont toujours expliqu es et la classe contenant l erreur est fournie dans un fichier d aide
24. 4 D veloppement d un outil de gestion implicite et de d bogage 61 de m moire bas sur la programmation par aspect AspectC Debogger l espace allou contient il nous est possible d entamer une s rie de v rifications afin de valider l acc s ce dernier En effet la suite de toute d tection de l op rateur new on fait appel la m thode NewSecurise Cette m thode fait partie de notre module de gestion de m moire et sa principale t che est de s curiser toute allocation dynamique que l application cliente effectue Elle prendra comme argument i un pointeur pointant sur l adresse de la m moire retourn e par l op rateur new ii une variable de type size_t retournant la taille de l espace m moire allou e iii un pointeur constant de type char pour retourner le nom du fichier o l allocation s est produite iv et enfin une variable positive et constante de type long pour retourner le num ro de ligne o l allocation s est produite Le prototype de la m thode NewSecurise sera comme suit void NewSecurise void PrincipalP size t size const char nom_fich const unsigned long num ligne Les fonctionnalit s qu AspectC TM nous procure se chargent d extraire les donn es qu on passera NewSecurise comme arguments Vu que l extraction de la faille d j t d crite dans la Section 4 3 2 3 on se contentera d expliquer l extraction du premier et des deux derniers arguments
25. Garbage Collector augmente les performances d un programme dans d autres cas le contraire se produit Le choix de l algorithme et des param tres d un Garbage Collector est important car c est de cette base qu on peut alt rer ou am liorer significativement les performances d un programme ou encore le langage de programmation en question Levanoni et Petrank 2001 Pour rem dier aux failles cit es ci dessus les sp cialistes dans le domaine ont opt pour le d veloppement d un outil de programmation sp cialis dans la gestion de m moire que se soit au niveau de l allocation ou encore de la d sallocation i un outil qui serait capable de d tecter les fuites de m moires memory leaks et les erreurs de d passement de tampon buffer overflow et ii un outil qui est capable d viter les erreurs d allocations et de fournir ce qu on appelle une allocation s curis e En effet c est l qu intervient Poutil de programmation connu sous le nom de d bogueur de m moire Memory Debugger dont le but n est pas de remplacer un Garbage Collector mais de le compl ter Dans ce qui suit nous d crirons l utilit d un d bogueur de m moire en laborant une tude de deux outils qu on consid re les plus pertinents dans le domaine Mais tout d abord on juge important de d crire les diff rentes erreurs dues une mauvaise gestion de m moire qu un programme pourrait avoir confronter On valuera le
26. aspect est expliqu e en d tail dans le chapitre suivant 32 Chapitre 3 Pr occupations et aspects Dans le chapitre pr c dent de ce m moire nous avons pr sent diff rents axes de recherche en mati re de gestion et de d bogage de m moire et avons choisi de mettre au point notre propre outil Nous pr senterons dans ce Chapitre l approche qu on utilisera pour l impl mentation de ce dernier 3 1 Introduction Les m thodes d adaptation de logiciel sont employ es dans la technologie de la programmation pour deux raisons i pour contr ler la complexit des syst mes que nous essayons d tablir et ii pour retarder dans la mesure du possible les diff rentes liaisons entit s pr occupations des syst mes en collaboration Mcheick 2006 Ainsi ils peuvent tre d velopp s test s et maintenus s par ment pour ensuite atteindre un plus grand degr de r utilisation et de facilit de maintenance Au fur et mesure du temps un certain nombre d approches ont vu leur apparition dans le but de rendre modulaires des logiciels compris la programmation orient e objet la m thode OORAM Reenskaugh et al 1995 la programmation orient e sujet Harrison et Ossher 1993 la programmation orient e aspect qui sert de toile de fond pour ce travail Kiczales et al 1997 la programmation orient e vue Mili et al 1999 etc La croissance des exp riences dans l utilisation des approches d adaptation des
27. avec l ex cution normale du programme sans pour autant d ranger son comportement normal Ce genre d instrumentation procure un travail en extra dans le sens o elle aide d tecter des erreurs de gestion de m moire Le fait que Memcheck instrumente et analyse le code machine et non pas le code source ou encore le code objet lui permet d avoir e une large applicabilit fonctionne avec des programmes crits avec diff rents langages de programmation e couverture totale toutes les parties du programme client sont ex cutables sous Memcheck incluant les biblioth ques li es dynamiquement e facilit d utilisation Memcheck ne demande pas que le programme client soit recompil ou redirig 26 Chapitre 2 Gestion de la m moire un tat de l art Memcheck est r put pour sa facilit d utilisation Consid rons un programme badprog cpp Pour proc der l analyse du programme compil badprog l utilisateur aurait taper tout simplement valgrind tool memcheck badprog Un programme analys sous Memcheck s ex cute peu pr s 20 30 fois plus lentement que d habitude Ce ralentissement est d d une part aux v rifications effectu es par Memcheck et d une autre part l ex cution du framework qui l abrite Valgrind Memcheck fut le premier outil traquer les erreurs de gestion de m moire au niveau du bit Des outils semblables n ont pu atteindre que l octet comme niveau de granular
28. d inclure lt cstdio gt dans la mesure o tout ce proc d est effectu part par l aspect L exemple de notre aspect expos ci dessus englobe la plupart des l ments du langage AspectC charg s d accomplir tous les avantages qu un aspect est suppos offrir Un aspect du langage AspectC principalement con u comme un module pour impl menter une pr occupation transverse s inspire fortement de la syntaxe d une classe sous C Toutefois en plus des fonctions membres et des l ments de donn es un aspect peut d finir une m thode d aspect Apr s le mot cl advice une expression de coupe transverse d finit l emplacement o la m thode d aspect est cens e affecter le programme autrement dit les points de jonction alors que la partie qui suit d finit la fa on dont le programme est cens tre affect sur ces points Il s agit de la r gle g n rale pour l ensemble des diff rents types de m thode d aspect sous AspectC Dans le Chapitre 4 des exemples du m me domaine et concernant notre travail de recherche seront d taill s L expression de la coupe transverse donn e dans l exemple de la Figure 3 3 est execution C est dire cette m thode d aspect devrait oe affecter l ex cution de l ensemble des fonctions qui satisfont l expression Dans les expressions de correspondance le signe et les caract res lt
29. de cas et r sultats exp rimentaux 81 Nous avons remplac l instruction responsable de l affection des textures au tableau m_pTextures ligne 21 la Figure 5 8 par l instruction crite la ligne 11 de la Figure 5 9 En effet un test a t ajout de fa on que si un probl me quelconque se produit lors de cette affectation la case i du tableau m_pTextures est remise NULL Ainsi au lieu de contenir une valeur erron e m_pTextures i peut tre sujet d une nouvelle affectation Une nouvelle analyse nous a permis de constater que le nombre de textures ayant des valeurs erron es tait rendu z ro et aucun d passement de tampon au niveau du tableau m_pTextures n a t signal 5 4 Discussion Dans cette section nous passons en revue les crit res pos s au d but de ce chapitre et comparons les outils AspectC Debogger et Purify Chaque crit re sera discut dans un paragraphe pour ensuite r sumer le tout dans un tableau comparatif le crit re facilit et transparence d utilisation ne sera pas abord vu que nous l avons trait la fin de la Section 5 2 5 4 1 Habilit de d tection et de traitement des diff rents types d erreurs de gestion de m moire C Nous avons vu que dans certains cas de fuite de m moire AspectC Debogger tait plus efficace que l outil Purify Aussi nous avons confirm que le cas d un acc s l gal une zone m moire inappropri pr sente une limit
30. des composantes et des aspects pour former le syst me final E nt quienes nd ias eve asta Me Rte E Ne nette tent male 39 Figure 1 1 Aspect Tracing s ex cutant avant le d marrage de l ex cution de n importe quelles fonctions du programme principale inner 41 Figure 4 1 Exemple avant tissage de l asp ect 48 Figure 4 2 Aspect Malloccounter oi sess anenanniedinn menuitem 5I Figure 4 3 Effet de aspect apr s tissage st him nsbimetiirnastainitese 52 Figure 4 4 Mod le de gestion de m moire AspectC Debogger ccssccsccscsscsseersecssecnsnes 55 Figure 4 5 Structure du conteneur et les informations ajout es pour chaque pointeur 58 Figure 4 6 Changement du comportement de l op rateur new 59 Figure 4 7 D claration d un aspect avec acc s une variable contextuelle 60 Figure 4 8 Mod le d allocation accompagnant la DAC 63 Figure 5 1 Capture d cran du jeu Aerosun nn lmnintesteneneleinndisnttrens 71 Figure 5 2 Activer AspectC Add In sous le projet Asteroids sssessessesseeessssesersseseersesses 73 Figure 5 3 Asteroids Visual Studio 2005 et AspectC Add In oe eesecscesseretecnsscerees 73 Figure 5 4 Interface utilisateur de AspectC Debogger ss 74 Figure 5 5 Fuite de m moire dans AsteroidField cpp ss 76 Figure 5 6 Purify signale une fausse alerte d une fuite de m moire dans AsteroidGame cpp CT ES D NS catty hes 77 Figure 5 7 Cas d une erreur d un acc s l gal
31. du Chapitre 5 Dans le cadre de ce travail m me si nous n avons pas r solu toutes les limites que d autres d bogueurs de m moire admettent nous avons tout de m me r ussi couvrir l essentiel de nos objectifs En effet certains points n ont pas t r solus et pourraient tre explor s travers des recherches futures Voici quelques unes de nos suggestions e En effet une instrumentation par aspect a g n r un ralentissement consid rable de l application cliente M me en ayant subi des am liorations AspectC reste instable et avons rencontr plusieurs cas d erreur ralentissant les tisseurs d aspect Nous comptons sur le travail des chercheurs dans ce domaine pour qu AspectC puisse tre plus performant et consolider encore plus le langage C e Les subdivisions d espaces m moire qu un programmeur peu allou sans l aide de la fonction malloc n est pas trait par notre outil des recherches dans ce sens ne peuvent qu largir la flexibilit du langage C cf Section 2 2 2 2 b e Le cas d une collaboration entre une gestion de m moire statique et dynamique n est pas carter En effet certains chercheurs pensent pouvoir b n ficier des donn es de sortie d une analyse statique afin d appuyer une ventuelle analyse dynamique dunno point Est il possible de d velopper et d enrichir ce concept d id e avec PPOA L aspect g n rique que notre outil d tient lui per
32. e dans un m me domaine espace On notera que le code source n est en aucun cas modifi durant l analyse Cette interface est fortement inspir e de celle de Purify la seule diff rence est que Purify n affiche pas le d tail des classes C analys es voir Section 2 2 2 4 du Chapitre 2 Chapitre 5 Etude de cas et r sultats exp rimentaux 75 5 3 Exp rience et r sultats Dans cette section nous mettons l accent sur le premier crit re de comparaison de cette tude de cas l habilit de d tection et de traitement des erreurs de gestion de m moire Bien que nous jugions important la totalit des crit res fix s afin de comparer les deux outils ce crit re reste tout de m me le plus important L exp rience consiste ex cuter l application Asteroids sous AspectC Debogger et Purify et nous nous efforcerons de couvrir les fuites de m moire les erreurs d acc s et enfin les d passements de tampon Notre choix de ce type d erreurs est argument dans le Chapitre 2 de ce m moire Les r sultats de l exp rience seront r sum s dans des tableaux La disposition de ces tableaux sera d crite dans le paragraphe suivant Une s rie de benchmarks illustrant les r sultats de notre exp rience sont disponibles l annexe B La premi re colonne d finit l application analys e partir de l le tableau est divis en deux parties chacune est r serv e pour un outil En ce qui concerne la r partition de ces
33. ensemble des appels de la fonction fest e execution point de jointure Par exemple execution void test collecte l ensemble des ex cutions de la fonction test 2 un ensemble des noms de classes qui sont seulement d riv es des classes o le point de jointure est sp cifi e derived point de jointure Par exemple derived maclasse collecte tous les noms de classes d riv es de maclasse 3 un ensemble identifiant la port e d un point de jointure e within point de jointure Par exemple call void foo amp amp within myClas collecte l ensemble des fonctions foo qui sont dans les m thodes de la classe myClas Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 50 de m moire bas sur la programmation par aspect AspectC Debogger Dans le cas de notre exemple pour collecter la totalit des appels de malloc nous utiliserons la coupe transverse suivante call void malloc size t 4 2 1 3 Composition de coupes transverses pointcut composition Les op rateurs logiques peuvent tre utilis s afin de combiner les coupes transverses ils sont utilis s de la m me fa on comme dans le cas de C Supposons que nous voulons enrichir l exemple de la Figure 4 1 et lui permettre de v rifier si l espace m moire d j allou par malloc a t chang ou non pas realloc Nous utiliserons pour ce propos l op rateur logique ou pour combiner les deux c
34. es e celles qui ont t lib r es mais qui sont encore initialis es Pour maintenir jour toutes ces informations Purify utilise une table qui lui permet de d pister le statut de chaque octet de m moire utilis par le programme Dans cette table chaque octet de m moire est repr sent par deux bits Le premier est mis en question si son octet correspondant a t allou Et le deuxi me est mis en question dans le cas o la zone m moire a t initialis e Purify se sert de ces deux bits pour d crire quatre tats diff rents de m moire rouge jaune vert et bleu Purify User s Guide 1999 i Red legal to read write or free g red and blue memory memory Blue unallocated and Memory uninitialized f freed but stil intiahzed malloc Legal to write or free but Yellow illegal to read memory allocated but uninitialized Legal to read and write or free if allocated by malloc Figure 2 5 Purify tiquette les tats de m moire par couleur Purify User s Guide 1999 Chaque manipulation d une zone m moire donne suite 4 une v rification de son tat de couleur Purify v rifie l tat de la couleur du bloc de m moire pour d terminer si l op ration effectu e est valide ou non Si le programme acc de une zone m moire d une mani re ill gale Purify signale une erreur Chapitre 2 Gestion de la m moire un tat de Part Rouge Au d but Purify tiquette les tas et l
35. est qu il est plus facile au programmeur de comprendre exactement ce qui se passe Mais cela peut n cessiter une quantit importante de code source qui fera partie significativement de n importe quelle interface de module Ceci rend les Chapitre 2 Gestion de la m moire un tat de l art bogues de gestion de m moire plus fr quents Plusieurs langages utilisent cette technique tels que C C ADA En revanche dans le cas d une d sallocation implicite l espace m moire non utilis est automatiquement r cup r Ce type de gestion de m moire est un service qui est consid r comme une partie ou une extension du langage de programmation Les entit s qui assurent la gestion de m moire implicite connues sous le nom de Garbage Collector r alisent habituellement leurs t ches en lib rant les blocs de m moire non accessibles partir des variables du programme par exemple les variables qui ne peuvent tre atteintes partir des pointeurs Sioud 2006 Plusieurs langages utilisent cette technique parmi lesquels on cite Java Lisp Eiffel Modula II etc Dans la section suivante la gestion implicite via le Garbage Collector et ses limites seront d crites L ensemble d erreurs engendr es suite une mauvaise gestion de m moire sera d taill Et enfin les d bogueurs de m moire seront introduits comme la solution ces probl mes et leurs r les au niveau de la gestion de la m moire seront expliqu s 2
36. et ce en d pit des erreurs indiqu es int Static 5 int func void int Stack 5 Static 5 0 Erreur Static 0 Static 4 existe Static 5 est hors limite Stack 5 0 Erreur Stack 0 Stack 4 existe Stack Slest hors limite return 0 Figure 2 13 Memcheck ne d tecte pas les erreurs d acc s hors de la limite d un tableau 2 3 Gestion de la m moire et C Le langage C fait partie des langages de programmation les plus utilis s il est aussi bien connu pour sa facilit d utilisation que pour son efficacit Sinon le langage C reste un langage r put comme tant compliqu et illisible Cette r putation est en partie justifi e Ellis et Stroustrup 1990 La complexit du langage est in vitable lorsqu un programmeur cherche atteindre un niveau sup rieur de fonctionnalit s Par contre pour ce qui concerne la clart et la lisibilit du programme tout d pend de la bonne volont du programmeur Le langage C d tient des caract ristiques qui ont fait de lui un langage id al pour certains types de projet Il est incontournable dans le d veloppement des grands programmes Les optimisations des compilateurs actuels en font galement un langage de pr dilection pour ceux qui recherchent les performances Enfin le langage C est id al pour ceux qui doivent atteindre une portabilit des fichiers sources de leurs programmes non pas des fichiers ex cutables Strous
37. hension de quelques concepts fondamentaux de la programmation orient e aspect est primordiale Gati 2004 Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 49 de m moire bas sur la programmation par aspect AspectC Debogger 4 2 1 1 Les points de jointure Join point Par d finition les points de jointure sont les emplacements dans le code source o les aspects devront tre inject s Les points de jointure peuvent r f rer a des classes des structures des unions des objets ou des m thodes G n ralement parlant un point de jointure est un motif pattern qui est identifi lors de l ex cution du tisseur d aspect Dans l exemple de la Figure 4 1 malloc est le motif que nous recherchons La fonction retourne un pointeur de type void et a un argument de type size_t ainsi notre point de jointure sera comme suit void malloc sizet 4 2 1 2 Les coupes transverses Pointcut Une coupe transverse est utilis e pour identifier un groupe de points de jointure et devrait tre mis entre guillemets Afin de d finir des points de jointure plus sp cifiques les coupes transverses sont exprim es via les expressions de correspondance Voir Section 3 3 4 Selon l objectif du code d aspect les coupes transverses peuvent tre 1 un ensemble d appels ou d ex cutions partir d un point de jointure e call point de jointure Par exemple call void test collecte l
38. int gration des principaux composants voir figure 5 4 AspectC Debogger ic D ocuments and Settings Heri Dhiab Bureau Asteroids a J an CI Run Asteroid Game cpp w Fuite de m moire AsteroidField cpp i Ligne 12 C Documents and Settings Heni camera cpp Dhiab Bureau Asteroids AsteroidField cpp i Cockpit cpp i Fuite de m moire conteneur cpp zac Ligne 26 C Documents and Settings Heni d3dapp cpp Dhiab Bureau Asteroids Cockpit d3dfile cpp i Erreur d acc s l d3dutil cpp Ligne 23 C Documents and Settings Heni Debris cpp Dhiab Bureau Asteroids S hipHealth dsutil cpp i dxu f Figure 5 4 Interface utilisateur de AspectC Debogger En effet il suffit au programmeur de donner le chemin du r pertoire contenant toutes les classes de l application analyser puis de cliquer sur le bouton Run AspectC Debogger affichera dans un premier temps les classes cibl es et ensuite les r sultats de l analyse La nature de toute erreur d tect e le nom du fichier et le num ro de ligne ot elle s est produite sont consultables sur cran A ce stade de exp rience nous mettons l accent sur le quatri me crit re de comparaison de cette tude de cas facilit et transparence d utilisation de l outil Avec une telle interface le programmeur n a plus se soucier d aucun param trage il suffit d un seul clic et l application cliente est ex cut e puis analys
39. l exemple de Valgrind qui est un outil d analyse dynamique I permet le d bogage des zones m moire allou es dynamiquement et dans certain cas celles allou es d une mani re statique Il permet aussi la d tection des fuites de m moire et l analyse de performance profiling Il fut l origine con u pour tre une version libre de Purify sous GNU Linux sur architecture x86 Il a aujourd hui volu en devenant un framework g n rique pour la cr ation d outils dynamiques comme des checkers et profilers Valgrind 2008 Valgrind est un logiciel modulaire parmi ces modules on trouve Memcheck qui permet de d busquer les failles dans un programme au niveau de l utilisation de sa m moire II Chapitre 1 Introduction 4 effectue une s rie de tests afin de s assurer de la bonne utilisation des pointeurs et de la conformit des acc s et des lib rations des zones m moire Cet ensemble d outils a permis la gestion implicite de la m moire de g n raliser la plupart des langages orient s objet En effet Meyer 1988 a plac la gestion implicite de la m moire en troisi me position dans ses sept commandements de la programmation orient e objet Selon les chercheurs IBM Rational Purify 2008 Valgrind 2008 les outils de d bogages de m moire facilitent norm ment la t che des programmeurs Ces derniers n ont plus se soucier des erreurs de manipulation de m moire et passer des heures de frustrati
40. le tout dans un outil qu on a surnomm AspectC Debogger nous avons r alis une tude de cas afin de comparer ce dernier avec l outil Purify Cette tude a eu comme objectifs de juger l efficacit d AspectC Debogger d tecter et traiter les erreurs de gestion de m moire et d am liorer l implantation des tisseurs d AspectC dans le domaine du g nie logiciel cf Chapitres 5 Nous avons constat que notre outil t efficace dans la d tection des fuites de m moire des erreurs d acc s et des d passements de tampon Aussi nous avons pu conserver la gestion explicite que le langage C offre tout en la s curisant avec la gestion implicite qu AspectC Debogger procure une coexistence entre les deux a t atteinte Enfin nous avons constat que POA tait une technique qui peut automatiser la plupart des taches quand des nouvelles exigences sont ajout es L avantage de l POA est son aspect g n rique et sa capacit instrumenter un code durant son ex cution sans avoir a le modifier Une interface utilisateur a t fournie afin de permettre un haut niveau de transparence et de facilit d utilisation au programmeur Mes contributions dans ce m moire sont r sum es comme suit e Nous avons d velopp un outil et une m thode pour la gestion et la s curisation de la m moire pour le langage C e La principale limite de l outil Purify l acc s l gal une zone de m moire inappropri e
41. m me taille le tout la fois unsigned long MallocCalculeSomme const InfoPointeur info Calcule la somme des donn es d un pointeur return unsigned long info gt nbr magique unsigned long info gt est _alloue unsigned long info gt taille Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 66 de m moire bas sur la programmation par aspect AspectC Debogger unsigned long info gt nom fich unsigned long info gt num ligne V rifie la somme if info gt somme info MallocCalculeSomme info ERREUR Somme incorrecte 3 V rifier qu on n a pas crit en dehors du tampon overflow Dans le cas contraire un message d erreur est rapport indiquant la ligne et le nom du fichier o l erreur s est produite if TamponOverflowIntact info ERREUR Erreur d overflow tampon s u info gt nom_fich info gt num_ligne Pour les erreurs d underflow la signature de nos informations et la checksum somme de v rification s occupent de les d tecter Un gain au niveau de l espace m moire est suscit 4 3 3 3 D sallocation s curis e d une zone m moire Pour une d sallocation s curis e on fera appel la m thode DeleteSecurise qui prendra en argument l adresse des donn es supprimer et le num ro de ligne et le nom de fichier o l allocation s est produite void DeleteSecuris
42. m thodes suscit es Cela fausse totalement les mesures On propose dans notre aspect de gestion de m moire et plus pr cis ment dans le module de gestion de m moire une classe Chrono fournissant un moyen simple pour mesurer le temps processeur d un processus courant entre deux points d ex cutions La fonction GetProcessTimes de l API de Windows sera utilis e cette fin L utilisation de cette proc dure nous vite d avoir recours une gestion avanc e d un syst me multit che pour contr ler la pr emption de notre processus Notre aspect dispose en outre d une m moire comparable celle d un chronom tre classique afin de pouvoir ajouter une mesure d autres 4 3 1 2 D tection des portions de codes mesurer avec Aspect C Notre objectif est la mesure du temps d ex cution de toute application cliente analys e par notre outil de d bogage de m moire L impl mentation de la classe Chrono elle toute seule est insuffisante une instrumentation du code de l application cliente est obligatoire afin de d tecter le d but et la fin d ex cution des programmes cibles Plus en d tail notre aspect AspectChrono devra d tecter toute ex cution de la proc dure main au moyen de la coupe transverse suivante pointeut chrono execution main Ensuite d clencher le chronom tre juste avant le commencement de la proc dure main on utilisera le conseil suivant advice chrono befo
43. nuire son comportement Leurs pr sences et leurs suppressions n cessitent beaucoup d heures de travail sans pour autant garantir un bon r sultat elles sont donc tr s couteuses en temps et en argent Dans la Section 2 2 nous avons vu que les d bogueurs de m moire ont volu sous plusieurs formes dans les langages gestion implicite de la m moire mais qu ils ont t aussi d di s pour des langages gestion explicite de la m moire comme le langage C Ce dernier est un langage reconnu pour sa puissance et sa robustesse et l ajout d un d bogueur de m moire ne devrait en aucun cas l en diminuer Diff rents d bogueurs de m moire sp cifiques pour C ont t labor s mais malheureusement ne garantissent pas une gestion de m moire sans erreurs En effet les points suivants sont toujours soulev s ils ne sont pas r solus par les d buggeurs existants comme Purify et Valgrind e acc s incorrecte une zone de m moire l gale manipulation des pointeurs e ralentissement de l application cliente e d tection des erreurs hors de limite dans le cas o les donn es sont allou es d une mani re statique ou dans une pile Les aspects num r s la fin du Chapitre 1 forment un cadre de solution pour ces points Ces derniers seront r solus dans le Chapitre 4 en se basant sur la programmation par aspect qui nous permettra de d velopper un outil robuste de gestion de m moire La programmation par
44. on a appel AspectC Debogger qui g re la m moire de toute application C en utilisant la programmation orient e aspect comme support d instrumentation Notre contribution peut tre r sum e par les points suivants 1 un mod le et outil de gestion et de d bogage de m moire 2 un aspect pour s curiser les allocations et les d sallocations de la m moire 3 un aspect pour le d bogage de m moire d tection et traitement des erreurs qui sont dues une mauvaise gestion de la m moire 4 un aspect capable de calculer le temps d ex cution de diff rentes applications 5 un aspect capable de calculer la m moire utilis e tout au long de l application POA Programmation orient e aspect Chapitre 1 Introduction 7 6 une int gration des diff rents aspects avec une application existante et ceci d une fa on transparente une interface utilisateur conviviale serait la solution propos e Ces contributions seront d taill es et r alis es au Chapitres 4 Les r sultats exp rimentaux de notre outil seront pr sent s au Chapitre 5 travers une tude de cas Les crit res de comparaisons de cette derni re sont ceux pr sent es en Section 1 2 de ce pr sent chapitre 1 4 Structure du m moire Ce m moire est divis en six chapitres Le pr sent chapitre pr sente une introduction la probl matique g n rale ainsi qu un extrait des objectifs et solutions qu on propose Le Chapitre 2 pr se
45. ou d sallou Nous entendons dire par information sur le type d objet les classes o chaque objet a t cr pointcut ali classes classes 3 advice all_ classes void print cout lt lt Address of lt lt thisJoinPoint gt toString lt lt object lt lt void this lt lt endl e Classes Retourne toutes les classes e thisJoinPoint gt toString Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 55 de m moire bas sur la programmation par aspect AspectC Debogger Retourne un texte lisible d une chaine de caract res repr sentant l objet de la classe 4 3 Outil de gestion et de d bogage de m moire par aspect Dans le cadre de notre m moire notre priorit est d assurer une bonne gestion de la m moire allou e d une mani re dynamique c d lors de l ex cution de l application cliente Mais cela n emp che pas que plus loin dans nos recherches on essayera de trouver des solutions aux probl mes que des d bogueurs de m moire comme Purify et Memcheck ont pu rencontrer lors de certaines manipulations de la m moire Aspect de gestion de m moire Module de gestion de m moire AspeciC Classe JoinPoint D tection des zones d allocationsA d sallocations et extraction des donn es Application cliente Figure 4 4 Mod le de gestion de m moire AspectC Debogger L id e m m
46. ou encore se qu on appelle un d bogueur de m moire on facilite la t che de programmation et surtout la phase de d bogage En effet la d tection des erreurs telles que les fuites de m moire et les erreurs d acc s sera plus facile et le programmeur aura plus de facilit retracer ces ventuelles erreurs qui sont dues une mauvaise gestion de la m moire et lui pargnera donc un temps pr cieux Dans notre travail de recherche on va plut t se sp cialiser dans tout ce qui concerne l allocation dynamique de la m moire au sein du langage C et proposons une technique de listage de pointeurs qui permettra une manipulation s curis e et un suivi d taill des espaces m moire allou s dynamiquement Cette technique sera impl ment e par la programmation par aspect et plus pr cis ment avec l outil AspectC AspectC 2006 La gestion de la m moire sera consid r e comme une pr occupation transverse et sera regroup e en un seul aspect Ainsi les objets seront moins encombr s et ne contiendront que leurs fonctions essentielles et assureront alors une meilleure lisibilit ainsi qu une maintenance et une r utilisation plus faciles Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 48 de m moire bas sur la programmation par aspect AspectC Debogger 4 2 1 AspectC AspectC est une extension orient e aspect du langage universel C C est un pr processeur pour un com
47. version d AspectC nous a permis de r soudre certains probl mes comme la reconnaissance des ent tes iostream Par contre une autre contrainte est survenue qui est l incapacit d utiliser des namespace Cependant l utilisation du namespace demeure un grand probl me r soudre et tions obliger de la supprimer Nous avons chang std string par string pour permettre au tisseur d analyser le code C AspectC reste tout de m me une nouvelle technologie et comme avec toutes les technologies non m res l adoption r pandue de l POA est g n e par un manque d appui d outil et d ducation r pandue 5 5 Conclusion Dans ce chapitre nous avons pr sent exp rimentalement notre outil de d bogage de m moire AspectC Debogger aussi nous l avons compar avec loutil Purify Notre exp rience s est av r int ressante et avions pu connaitre les limites de notre outil et plus pr cis ment celle de l approche adopt e pour son impl mentation Bien qu il ait pu r soudre certaines limites de Purify AspectC Debogger admet encore des faiblesses et a connu des Chapitre 5 Etude de cas et r sultats exp rimentaux 84 contraintes qu il n a pas pu surmonter Ci dessous un tableau comparatif englobant les r sultats de notre exp rience En se r f rant toujours la num rotation des crit res num r s au d but de ce chapitre la premi re colonne indiquera le num ro du cri
48. 4 3 3 0bjectif de la Pecher ee nn Rein Mn Mn trial 45 Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage de m moire bas sur la programmation par aspect AspectC Debogger 47 HT NGO AUCUON m oee de nn NN Re T ee R 47 4 2 Gestion de m moire par ASPECt ru esssrnlisnentninennrenmnaninns einen 47 AD es ASPE tE naine ns tant rte Men orale te dust 48 4 2 1 1 Les points de jointure Join point 49 4 2 1 2 Les coupes transverses P OINIOUE otek css un niet ane et 49 4 2 1 3 Composition de coupes transverses Pointcut composition ccccceeseeees 50 4 2 1 4 Les coupes transverses nomm es Named Pointcut 50 4 2 1 5 Les expressions de correspondance Match expressions 50 4207 Les conseils AVC ana ae las drone Se 51 4 2 2 Les l ments affectant la consommation de m moire dynamique en C 52 4 2 2 1 Les membres de la classe JointPoint neneeese 53 4 2 2 2 Exemple de collection de donn es lors d une allocation et d une d sallocalio t sas dde RAR A dite ne N re 53 4 2 2 3 Collection des noms de classes tunisiennes ieounnshsdhazeateevcaniwioavevasanss 34 4 3 Outil de gestion et de d bogage de m moire par aspect sessesersererssrsreresisessrerrerssses 55 4 3 1 Aspect calculant le temps d ex cution de diff rentes applications 55 4 3 1 1 Mesure du temps d ex cution ss 55 4 3 1 2 D tection des portions d
49. Allocation dynamique d un pointeur de type DWORD pCursorBitmap gt LockRect amp lr NULL 0 pBitmap DWORD lr pBits if pcrArrayColor 0 fprintf stderr 3s s s n progname editor strerror errno exit 1 Sortie du programme sans liberer le pointeur pcrArrayColor else exit 0 Figure 5 5 Fuite de m moire dans AsteroidField cpp Le code list dans la Figure 5 6 est rapport de la classe AsteroidGame Purify signale une erreur qu on a classifi de type II La fonction DirectInput amp Create retourne un pointeur Chapitre 5 Etude de cas et r sultats exp rimentaux 77 sur un espace m moire HRESULT allou dynamiquement En cas d chec d allocation le programme se termine Cependant Purify est insensible ce type de raisonnement il ne peut d terminer que la fonction DirectInput8Create prend fin lorsque hr est NULL et rapporte une fausse alerte de fuite de m moire Dans le cas d AspectC Debogger aucune fuite de m moire n est signal e Les informations tenues concernant le pointeur hr et sur lesquelles notre outil se base pour connaitre son tat lui vitent ce genre de fausse alerte if FAILED hr DirectInput8Create GetModuleHandle NULL DIRECTINPUT VERSION IID IDirectInput8 VOID amp m_pDI NULL printf stderr Process failed n exit 2 sortie du programme avec hr NULL purify rapporte une fausse fuite d
50. Garbage Detector accessible par un simple appel et capable d identifier les fuites de m moire Un Garbage Detector est un sous syst me qui aide le d veloppeur trouver et ensuite liminer les fuites de m moire durant la phase de d veloppement La simple utilisation d un Garbage Detector permet aux programmeurs de profiter de la technologie qu offre un Garbage Collector sans pour autant subir les co ts qui lui sont associ s durant le temps d ex cution L utilisation de la technologie Garbage Collector lors de la phase de d veloppement d un programme nous permet de contourner les probl mes fondamentaux qu un Garbage Collector d di pour les langages C C est suppos rencontrer Par exemple pouvoir distinguer les objets consid r s comme des miettes Garbage de ceux qui ne le sont pas En effet le Garbage Detector que Purify utilise s pare le tas de miettes en trois cat gories 1 les zones m moire dont on est presque s re qu elles sont des miettes aucune r f rence de pointeur par le programme 22 Chapitre 2 Gestion de la m moire un tat de l art 2 les zones m moire qui sont potentiellement des miettes pas de r f rence de pointeur vers leur d but 3 les zones m moire qui ne sont probablement pas des miettes ils ont des r f rences de pointeur en leur d but Chaque bloc de m moire est identifi par son appel de fonction d allocation et le d veloppeur juge du fait s il est n cessair
51. UNIVERSITE DU QUEBEC MEMOIRE PRESENTE A L UNIVERSITE DU QUEBEC CHICOUTIMI COMME PARTIELLE EXIGENCE DE LA MAITRISE EN INFORMATIQUE PAR HENI DHIAB GESTION DE MEMOIRE DYNAMIQUE ET IMPLICITE PAR ASPECT POUR DES LOGICIELS C HIVER 2010 63 014 4 Sommaire Le langage C est un langage destin pour des projets complexes et de taille importante En effet il permet la programmation sous de multiples paradigmes comme la programmation proc durale la programmation orient e objet et la programmation g n rique Sa facilit d utilisation et son efficacit soutenues avec une bonne flexibilit et une bonne portabilit font de lui un langage performant et le 3 me utilis dans le monde Toutefois les dispositifs de s curit sont soit absents soit mal support s par la programmation C malheureusement la flexibilit et le contr le explicite des donn es que C offre au programmeur repr sentent une importante source de vuln rabilit et d erreurs critiques Certes les librairies C sont fournies aux programmeurs avec des fonctions pour la gestion des privil ges la gestion des fichiers ou encore la gestion du r seau mais n gligent les probl mes de s curit Notons que la s curit est celle de la gestion de m moire et celle des types tels que les d bordements de m moire tampon les erreurs de format de cha ne et les mauvaises conversions de type Malgr la disponibilit de nombreux livres et doc
52. acer d un tage un autre Pire le programme pourrait avoir besoin de m moire pour ouvrir la porte de l ascenseur alors que quelqu un pourrait tre emprisonn l int rieure vu la non disponibilit d espace m moire 2 1 3 3 Les d passements de tampon Buffer Overflow Dans le domaine de la s curit informatique et de la programmation le Buffer Overflow repr sente un tat anormal o un processus essaye de stocker des donn es au del des limites d une zone m moire r serv e et de longueur constante Ces donn es qu on peut d crire comme suppl mentaires peuvent se retrouver dans des zones m moire adjacentes qui sont suppos es accueillir d autres variables et donn es Une telle manipulation peut avoir comme cons quences e un comportement sporadique du programme irr gulier e une exception d acc s de m moire e un arr t du programme crash e des r sultats incorrects e ou encore suite une provocation d lib r e d un utilisateur malveillant une violation du syst me de s curit Les d passements de m moire sont des sources de vuln rabilit et forment une base pour l exploit des failles de s curit informatique dans un syst me d exploitation ou dans un logiciel Les langages de programmation qui ne sont pas munis de protection contre les acc s ill gaux la r criture des donn es dans des zones m moire inappropri es et l criture dans les 15 Chapitr
53. appelle des pr occupations qui se recoupent crosscutting concerns Baltus 2000 Pour faire face ce genre de probl matiques chercheurs et praticiens du g nie logiciel ont toujours utilis un outil conceptuel qui est la s paration des pr occupations separation of concerns La s paration des pr occupations est un concept pr sent depuis de nombreuses ann es dans l ing nierie des logiciels Mcheick 2006 Les diff rentes pr occupations des concepteurs apparaissent comme les motivations premi res pour organiser et d composer une application en un ensemble d l ments compr hensibles et facilement manipulables La s paration en pr occupations apparait dans les diff rentes tapes du cycle de vie du logiciel II s agit de pr occupations d ordre fonctionnel s parations des fonctions de l application d ordre technique s paration des propri t s du logiciel syst me ou encore li es aux r les des acteurs du processus logiciel s paration des actions de manipulation du logiciel Par ces pr occupations le logiciel n est plus abord dans sa globalit mais en parties Cette approche r duit la complexit de conception de r alisation mais aussi de maintenance d un logiciel et en am liore la compr hension la r utilisation et l volution Sioud 2006 En ce qui nous concerne nous devons essentiellement pouvoir distinguer les pr occupations fonctionnelles des pr occupations non fonctionnelles tec
54. as contraire pourrait entrainer des fuites de m moire et ainsi r duire les performances et la disponibilit du syst me en fonctionnement En effet les syst mes d exploitation limitent la taille des espaces m moire et un processus devrait se d fendre lui m me contre l puisement de ces ressources Lorsque la limite est atteinte le processus n est plus en mesure de s ex cuter et est victime d un chec de service Pour pr venir les fuites de m moire AspectC Debogger fait tat de chaque espace m moire allou dynamiquement et qui devrait tre lib r avant la fin du processus M me si un espace m moire est dans le doute qu il soit une fuite de m moire notre outil le signale de la sorte et c est au programmeur que revient la d cision finale de le supprimer ou de le laisser Tableau 5 1 R sultat de d tection des fuites de m moire pre Does jo TE pes report es coul s report es coul s i 2 rom fr oe ee ee Notre outil rapporte des erreurs pour tous les chemins qui allouent des emplacements m moire non lib r s avant la sortie Nous illustrons ci dessous diff rents exemples L exemple du code de la Figure 5 5 illustre une r elle fuite de m moire dans la classe AsteroidField Un pointeur de type DWORD est allou et ne sera jamais lib r AspectC Debogger et Purify d tectent cette erreur COLORREF pcrArrayColor NULL pcrArrayColor new DWORD dwWidth dwHeightDest
55. ations des espaces m moire C ii un aspect de d tection et de traitement des erreurs qui sont dues une mauvaise gestion de m moire C et iii un aspect capable de calculer le besoin d une application C en m moire ainsi que son temps d ex cution L outil incarnant la solution propos e a t exp riment sur une application existante et a t compar avec l outil Purify selon six crit res bien identifi s Chapitre 5 Table des mati res Chapitrel Introduction ss 1 1 1 Fnonc de probl matiques rss se Bint dss pasietersenecs ARE 5 1 2 Principe eRe DS RO ET Pe etal 5 T3 Contribution oer eae TS en NN eh valent 6 14 Str cture du mMm moir eor And nement nee t 7 Chapitre 2 Gestion de la m moire un tat de Part ccscccscsccssssccscsscssecesccesasessnsssceresens 8 2 Gestion du cycle de vie des objets uns nr denim tent 8 Delle MMODUCHON sente na ten re an em an tee 8 2 1 2 Gestion de m moire implicite occ naine need din din ue 10 2 1 3 Les erreurs dues une mauvaise gestion de m moire 132 2 1 3 1 Les erreurs d acc s Access Errors cccccccccccceceeevente cent ee teense tees sentenetetens 12 2 1 3 2 Les fuites de m moires Memory Leaks cccccccccccesseceeecenenteeevseeetesstenass 13 2 1 3 3 Les d passements de tampon Buffer Overflow 15 2 2 Les d bogueurs de m moire dynamiques sssscccsscnseessseceeessstesseonssessesseoseesousees 16 2 2h Introductio
56. bu Facult s Universitaires Notre Dame de la Paix Namur Belgique H J Boeh Space efficient conservative garbage collection Proceedings of SIGPLAN 93 Conference on Programming Languages Design and Implementation volume 28 6 of ACM SIGPLAN Notices Albuquerque NM ACM Press June 1993 H Boehm Bounding Space Usage of Conservative Garbage Collectors Proceeedings of the 2002 ACM SIGPLAN SIGACT Symposium on Principles of Programming Languages pp 93 100 Jan 2002 O H Bray Data management requirements The similarity of memory management database systems and message processing Proceedings of the 3rd workshop on Computer architecture Non numeric processing ACM Press New York NY USA Pages 68 76 1977 Scientific Literature Digital Library and Search Engine Purify Fast Detection of Memory Leaks and Access Errors 1990 Scientific Literature Digital Library and Search Engine Purify Fast Detection of Memory Leaks and Access Errors 2008 G E Collins A method for overlapping and erasure of lists Communications of the ACM 3 12 655 657 December 1960 Patrick Cousot Interpr tation abstraite J F Technique et science informatiques Vol 19 no 1 2000 Syrine Tlili et Mourad Debbabi Type and Effect Discipline for Memory anda Type Safety of C Code Faculty of Engineering and Computer Bibliographie Dailey 1999 Deitel 2010 Detlefs 1992 Detlefs 1994 DirectX 2010 Edelso
57. causer des plantages inattendus Par exemple l utilisation de char en C co te aux tats Unis et au Japon deux milliards de dollars chaque ann e en temps perdu en d bogage et en arr t des programmes Vasudevan 2000 Si on utilise char en C cela est tr s co teux en particulier si le programme fait plus de 50 000 lignes de code Le langage C n a pas la capacit de g rer sa m moire d une fa on autonome Plusieurs tentatives d incorporation d outils pour la gestion implicite des entit s et objets au sein du langage C ont connu l chec cause de circonstances compliqu es o volue le langage Stroustrup 2004 Les chercheurs ont tous simplement opt pour l utilisation d outils externes comme le ramasse miette et le d bogueur de m moire 2 4 Conclusion Dans ce chapitre nous avons survol les principes de cycle de vie des objets pour en arriver ensuite la gestion de m moire que ce soit d une mani re explicite ou encore implicite En effet les m thodes de gestion implicite de la m moire par exemple les Garbage Collector se voient parmi les plus prometteuses Mais nous avons vu aussi que sans l aide 31 Chapitre 2 Gestion de la m moire un tat de l art d un d bogueur de m moire on ne peut garantir une gestion de m moire compl te d une application C Les erreurs d acc s de fuites de m moire et de d bordement peuvent tre fatales pour un syst me ou encore
58. chargera d initialiser les zones m moires suppl mentaires c Coordination du conteneur avec les allocations dynamiques atteintes dans l application cliente La m thode ConteneurPointeur Ajoute ajoute un l ment notre conteneur et le lie avec le pointeur retourn par l op rateur new Ainsi toute DAC aurait donc son l ment correspondant dans le conteneur ConteneurPointeur Ajoute prendra comme argument un pointeur nfPtr pointant sur la zone InfoPointeur qui accompagne la DAC voir la Figure 4 7 ci dessous l DAC Donn e allou e pour l application cliente z InfoPointeur D finition dans la Figure 4 4 Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 63 de m moire bas sur la programmation par aspect AspectC Debogger DAC Tampon anri Overflow infoPointeur ptr infa InfoPointeur ptr ints DAC Tampon anti Overilow InfoPointsur Figure 4 8 Mod le d allocation accompagnant la DAC La liaison s effectue travers deux op rations d affectations e Chaque l ment du conteneur aura son pointeur ptr_info point sur sa zone r ciproque InfoPointeur allou e par la m thode NewSecurise e Et inversement chaque l ment nfoPointeur allou avec la DAC pointera sur son l ment r ciproque du conteneur A ce niveau la d claration de l attribut prr_liste de type PtrChaine dans la structure JnfoPointeur est justifi e Figure 4 4
59. cs taco utilisateur pdf 2005 James W Paulson Giancarlo Succi and Armin Eberlein An empirical study of open source and closed source software products IEEE Trans Softw Eng 2004 Bibliographie 92 pure systems 2010 http www pure systems com Robillard et Murphy 2001 Martin P Robillard et Gail C Murphy Analysing Concerns Using Class Member Dependencies ICSE 2001 Workshop on Advanced Separation of Concerns in Software Engineering 2001 Annexe A Benchmarks des r sultats exp rimentaux Cette section de l annexe contient trois benchmarks comparant les r sultats d analyse de l application Asteroids sous les deux outils AspectC Debogger et Purify Le Chapitre 5 utilise ces benchmarks pour compl ter l exp rimentation Fuites de m moire dans Asteroids a a ae ae een Erreurs Temps report es coul s id Purify AspectC Debogger Erreurs d acc s dans Asteroids Erreurs report es coul s a Purify W AspectC Debogger Annexe 94 D passements de tampon dans Asteroids Erreurs report es coul s ad Purify AspectC Debogger B Code source de l application AspectC Debugger Cette section de l annexe contient le code source des principaux modules de l application Asteroids Certaines parties du code ont t limin es pour aider a la lecture Conteneur h ifndef CONTENEUR_H define CONTENEUR_H
60. cts Frajects o 500 3 0090 1 500 Z000 2500 3000 3 500 4 000 4509 5090 5 500 6000 6 500 7 000 7 500 6 000 unla programming cabal programming windows programming shed prouramnemtn visual basic programming fortran progranininag i delphi programming ae programming SE ruby programming cel tk programmtit aq programmin python programmin Bhp progranimin peri programming ott programy java programmin progranintin Figure 1 1 Fr quence d utilisation du langage C Freshmeat 2007 Les erreurs de gestion de m moire sont principalement les fuites de m moire Memory Leaks les d passements de m moire buffer Overflows et les erreurs d acc s aux zones m moire Memory Access Errors Ces types d erreurs sont essentiellement dus aux bogues reli s aux allocations et aux d sallocations des espaces m moire dans un premier temps la Chapitre 1 Introduction 3 m moire est g r e par le programmeur lui m me en utilisant les fonctions d allocations et de lib rations qu un langage de programmation peut fournir on parle alors de gestion explicite de la m moire Par exemple en C C on fait appel aux fonctions alloc malloc les op rateurs new delete free et les m thodes constructeurs et destructeurs pour les objets Dans un deuxi me temps et avec des approches diff rentes la m moire est g r e implicitement par les langages de programmation via le ramasse miette Garbage C
61. de son analyse e absence d une coexistence transparente entre une gestion implicite et explicite de la m moire e il est juste possible de d tecter les fuites de m moire pour seulement les zones m moire retourn es par la fonction malloc e _l inaptitude de d tecter les erreurs d acc s hors du bloc de m moire dans le cas d une allocation statique par exemple les variables locales ou encore les donn es allou es sur une pile Chapitre 1 Introduction 5 N anmoins les travaux chez Pure Software et Valgrind developers restent optimistes puisqu ils ont pu r soudre la plupart des probl mes rencontr s lors de l int gration d un outil de d bogage de m moire 1 1 nonc de la probl matique Le langage C est un langage renomm pour sa puissance et son utilisation fr quente dans le domaine du g nie logiciel N anmoins l absence d une gestion implicite de sa m moire se trouve tre une grande faiblesse et remet en question sa robustesse Vu que des chercheurs ont d j r solu le probl me de fa on plus ou moins ad quate l objectif de la pr sente recherche est de raffiner ces solutions en tenant compte de leurs limites Ce que nous proposons est comme suit e d velopper un concept th orique d un gestionnaire de m moire pour le langage C e impl menter ce concept pour que le langage C puisse garder l image d un langage puissant flexible et s curitaire et ce que ce soit
62. degr de gravit de ces erreurs ainsi que leurs mani res d affecter le programme durant son ex cution 12 Chapitre 2 Gestion de la m moire un tat de l art 2 1 3 Erreurs dues une mauvaise gestion de la m moire 2 1 3 1 Les erreurs d acc s Access Errors Une simple erreur d acc s en m moire telle que la lecture d une zone m moire non initialis e ou l criture sur une zone m moire lib r e peut pousser un programme agir d une fa on impr visible ou encore causer son dysfonctionnement crash Dans un programme consid r comme non trivial il est presque impossible d liminer la totalit de ce type d erreurs vu qu elles produisent rarement et irr guli rement des comportements observables Tlili 2009 M me si les programmes sont examin s intensivement durant des p riodes prolong es de temps des erreurs peuvent chapper une ventuelle d tection CiteSeer 1990 La combinaison de circonstances exig es pour qu une erreur se produise et pour que ses sympt mes deviennent visibles peut tre pratiquement impossible cr er dans l environnement de d veloppement ou d essai Ceci pousse les programmeurs passer beaucoup d heures la recherche de ce type d erreurs sans carter l ventualit qu un utilisateur final puisse tre confront ces derni res en premier lieu Dans le cas o une erreur d acc s de m moire d clenche un sympt me observable la d pist
63. deux principales parties du tableau elle est identique La premi re colonne contient le nombre d erreurs report es par chacun des outils Apr s une inspection manuelle des erreurs signal es nous classons ces derni res dans les trois colonnes suivantes e Err Colonne pour les erreurs potentielles e IP Colonne pour les erreurs n cessitant une intervention du programmeur afin de les valider e II Colonne pour les erreurs qui sont ind cidables l inspection manuelle une s rie de tests s impose Le temps de contr le des programmes est donn dans la derni re colonne Nous avons jug ad quat de tester AspectC Debogger avec l application DebugTest analys e par Purify dans la Section 2 2 2 3 du Chapitre 2 Le rapport d erreurs tant d j disponible il fallait v rifier qu AspectC Debogger puisse d tecter les m mes erreurs son tour Le test a t r ussi la totalit des erreurs a t atteinte pour plus de pr cision se r f rer la section mentionn e au d but du paragraphe 5 3 1 Les fuites de m moire Les emplacements m moires qui sont affect s des processus peuvent contenir des donn es sp cifiques qui ne devraient pas tre divulgu es des utilisateurs non autoris s Chapitre 5 Etude de cas et r sultats exp rimentaux 76 Aussi un processus devrait s assurer que tout emplacement m moire sera lib r et nettoy une fois qu il n est plus d aucune utilit Le c
64. du d partement d Informatique et de Math matiques de l Universit du Qu bec Chicoutimi pour tous les enrichissements que j ai eus ainsi que leur aide inestimable Finalement je remercie galement mes amis qui m ont aid durant ce travail Merci Bouhmid merci Sabry merci Ghazi et merci Achraf Merci pour votre hospitalit Merci tous ceux qui m ont aid finir mon travail de recherche Chapitre 1 Introduction travers les derni res d cennies le domaine du g nie logiciel s est forg une place importante au sein du monde moderne Le logiciel est rendu l une des principales cl s de r ussite de l entreprise d aujourd hui En effet les logiciels voient leurs performances se multiplier il s agit d une r volution Au sein de cette croissance le langage C s est toujours appropri une place importante vu sa fr quence d utilisation lev e La plupart des logiciels que ce soit libre open source ou non sont crits en C ISO IEC 2003 Cette panoplie de logiciels comprend les syst mes d exploitation Linux Linux 2009 FreeBSD FreeBSD 20081 des pilotes de p riph riques des jeux vid o le tout compl ment par des serveurs internet et des bases de donn es MySQL etc Le C est consid r comme un langage performant flexible et fortement portable Tlili 2009 N tant pas soutenu par dispositifs de s curit les services que offre le langage C deviennent donc une sou
65. du pointeur allou est nulle Sinon pour des v rifications plus complexes on utilisera les informations stock es dans les espaces m moire suppl mentaires avant toute manipulation d un pointeur que ce soit pour un acc s aux donn es sur lesquelles il pointe ou encore pour une suppression d finitive de ces derni res il faudrait tre s r qu on pointe sur la bonne adresse Les attributs d j initialis s lors de l allocation s curis e seront nos indicateurs La m thode VerifielnfoPointeur effectuera diff rents tests elle prendra comme argument un pointeur de type JnfoPointeur suppos pointer sur les informations des donn es manipuler par exemple Infptr dans le cas de la Figure 4 7 Nous num rons ci dessous les diff rents tests que la m thode VerifieInfoPointeur effectue 1 V rifier que l attribut nbr magique que chaque pointeur poss de est bien gal la variable globale et constate NEW NBR MAGIQUE Ce genre de test nous assure le fait qu on pointe sur une zone valide Dans le cas contraire un message d erreur sera rapport V rifie les nombres magiques if info gt nbr magique MALLOC NBR MAGIQUE ERREUR Pointeur invalide 2 Additionner les donn es d un pointeur constitue un indicateur important En effet chaque pointeur doit avoir une sommation unique vu qu il ne peut y avoir deux pointeurs d tenant un m me statut un m me num ro de ligne un m me non de fichier et une
66. e const void ptr const char nom fich const unsigned long num ligne DeleteSecurise aura comme argument un pointeur de type void c d un pointeur nul pouvant rapporter n importe quel type de donn e La s curisation de la d sallocation est atteinte travers la s rie d instructions suivante 1 on v rifie la validit du pointeur l aide de la m thode VerifieInfoPointeur d j cit e dans la Section 4 3 3 2 2 on s assure que les donn es n ont pas t d sallou es dans un temps ant rieur l attribut est _alloue doit tre true on sort du conteneur l l ment correspondant aux donn es supprim es 4 on met l attribut est_alloue false et enfin on lib re la m moire l aide de la m thode free Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 67 de m moire bas sur la programmation par aspect AspectC Debogger 4 3 4 Aspect de d tection des erreurs de fuites de m moire En listant toute allocation dynamique dans le conteneur il nous est possible de voir quelle zone m moire est encore allou e ou peut tre qu on a oubli de d sallouer Lors du parcours de la liste doublement chain e chaque l ment rencontr peut tre sujet d une fuite de m moire Notre t che est de fournir au programmeur tous les renseignements sp cifiques chaque allocation et c est lui que revient la d cision de la consid rer comme tant une fuite de
67. e 1 Introduction 2 techniques automatis es de d tection des erreurs et de vuln rabilit sont devenues tr s utiles dans un diagnostic de s curit et d erreurs Tlili 2009 Dans la litt rature il existe une gamme d approches de d tection des erreurs qui sont principalement class es sous l analyse dynamique et l analyse statique IBM Rational Purify 2008 Sioud 2006 Aiken 2007 Tlili 2009 L analyse dynamique surveille l ex cution du programme afin de trouver les erreurs une fois qu elles se produisent La pr cision est sa principale cl Pour atteindre un haut degr d efficacit d une analyse dynamique le programme cible devrait tre ex cut avec des entr es suffisantes de test afin d observer l ensemble de ses comportements possibles L exploration de ces entr es chemins d ex cution n cessite la d finition difficile d un grand nombre de cas de test D autre part l analyse statique op re sur le code source sans l ex cution du programme afin de pr dire les erreurs potentielles lors du temps d ex cution Contrairement son homologue dynamique l analyse statique n introduit pas la notion du temps d ex cution Dans ce m moire notre effort de recherche se concentre sur le d veloppement d une technique automatis e afin de d tecter et ensuite r soudre les erreurs de gestion de m moire au sein de C et ceci en se basant sur une analyse dynamique Freshmeat Proje
68. e 2 Gestion de la m moire un tat de l art zones de limite de m moire comme C et C se voient fr quemment associ s aux erreurs cit es ci dessus Howard et Leblanc 2002 La Figure 2 3 et la Figure 2 4 illustrent un exemple simple de d passement de tampon Un programme a d fini deux donn es l mentaires ayant deux zones m moire adjacentes A un tampon String de 8 bits de longueur et B un tampon int de 2 bits de longueur Initialement A est vide mais les bits sont mis z ro et b contient l entier 3 E eee a meas Es ie ee eee ee eee Figure 2 3 A et B avant le d passement de tampon Maintenant le programme essaye de stocker la chaine de caract res excessive dans le tampon A suivie de la marque z ro pour invoquer la fin de cette derni re Suite une non v rification de la longueur de la cha ne de caract res une r criture overwrites de la valeur de B se produit RER en a aay ONE RENE ES RER Figure 2 4 A et B apr s le d passement de tampon Bien que le programmeur n ait aucune intention de changer le tampon B la valeur de celui ci fut bel et bien remplac e par un nombre form de la cha ne de caract res du tampon A Dans cet exemple et dans le cas d un syst me big endian utilisant la norme ASCII e suivi d un octet mis z ro deviendrait le num ro 25856 Si B est suppos stocker la seule variable l mentaire et enti re d finie par le programme l
69. e codes mesurer avec Aspect C 56 4 3 2 Aspect valuant la m moire utilis e lors de l ex cution d une application 57 4 3 2 1 D tection des appels de l op rateur new 58 4 3 2 2 Changement du comportement de l op rateur new en allouant deux espaces m moires suppl mentaires SA an tn Se ON Niet 58 4 3 2 3 Extraction de la taille de l espace m moire allou 59 4 3 3 Aspect pour s curiser les allocations et les d sallocations de m moire 60 4 3 3 1 Allocation NECUPISOL nimes one Ar des 60 a Extraction du pointeur retourn par l op rateur new 61 b Extraction du nom de fichier et du num ro de ligne 61 c Coordination du conteneur avec les allocations dynamiques atteintes dans L application CHENE insertion fees 62 d Initialisation des informations accompagnant toute allocation 63 e Initialisation du Tampon _Overflow ss 63 4 3 3 2 Validit d un DOME ere unten sise 64 4 3 3 3 D sallocation s curis e d une zone m moire 65 4 3 4 Aspect de d tection des erreurs de fuites de m moire 66 AA Conclusione nesir EA tena ined ne AE en nent nue 67 Chapitre 5 Etude de cas et r sultats exp rimentaux ss 68 5 1 Application analyser et motivations icci sccsseccseceossvesscsenseiecsncevstevantedeavesaresaseansinad eae 69 5 1 1 Choix de l application et Motivations lt s 0esed sssseosesasesesovescoseoeensoosporsuas
70. e de notre approche se r sume dans l impl mentation d un module appart enti re de gestion de m moire et une fois tabli son int gration au niveau de l application cliente se fera l aide de la programmation par aspect 4 3 1 Aspect calculant le temps d ex cution de diff rentes applications 4 3 1 1 Mesure du temps d ex cution La mesure du temps d ex cution CPU d une portion de code est parfois utile ex lors de l optimisation de l efficacit d une proc dure mais dans la plupart des cas on n a pas toujours les moyens de consacrer une machine exclusivement aux tests Le langage C met la disposition des programmeurs des proc dures comme clock GetTime QueryPerformanceCounter ou d autres permettant le calcul du temps r el qui s est coul entre deux points du code Lorsqu on ne peut pas d dier une machine aux tests l inconv nient Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 56 de m moire bas sur la programmation par aspect AspectC Debogger de ces m thodes est de prendre en compte le temps des autres applications qui tournent sur le syst me en concurrence avec celles qui sont test es Ce cas de figure est par exemple rencontr sur une machine dont on ne poss de pas les droits suffisants pour d sactiver une d fragmentation une analyse antivirus automatique etc Le temps consomm par ces applications n est alors pas d compt par les
71. e femme au grand c ur et qui je souhaite donner autant d amour que possible Que Dieu vous prot ge Je remercie mon fr re ami et coach Mouhamed Ali EI Ghazel Dali Une personne qui m a aid trouver le droit chemin et qui a toujours t pr sente quand j en avais besoin J esp re tre la hauteur de tes esp rances et qu un jour je puisse tre l pour toi aussi Un gros c lin ma douce et adorable s ur Jih ne Dhiab Une s ur que j admire et qui ne cesse de me donner le sourire Tu es la s ur la m re et la femme envers laquelle mon respect et mon amour sont in puisables Que Dieu te prot ge Je remercie mon grand fr re Atef Dhiab Un fr re que durant toute sa vie n a pas arr t de s inqui ter et de prendre soin de moi En effet je suis chanceux de t avoir comme fr re Tu es un exemple suivre J esp re tre la hauteur de tes esp rances Un grand merci toi et Maryouma que Dieu vous prot ge Un grand merci mes ni ces Aya Lina et Elaa pour tout le bonheur et la joie qu elles nous apportent Que Dieu vous prot ge J exprime ma sinc re gratitude mon directeur de recherche M Hamid Mcheick tant sur le plan du m moire en lui m me que sur le plan du soutien moral afin que je puisse terminer ce travail Un tr s grand merci et chapeau bas pour votre conscience professionnelle votre g n rosit et votre disponibilit De m me je remercie aussi tout le corps professoral et administratif
72. e l art Lors de l affichage de l attribut Info gt taille ligne 10 de la Figure 2 9 une erreur se produit Le pointeur nfo ne pointe pas sur la bonne adresse et ne peut atteindre l attribut taille Purify est incapable de d tecter une telle erreur vu que l adresse m moire char pir 2 est correctement allou e et initialis e donc pour Purify cet acc s est totalement l gal Purify contr le les acc s aux m moires et les blocs de m moire acc d s non pas lParithm tique des pointeurs 2 2 2 2 Les erreurs de fuite de m moire Memory Leaks Errors a Comment Purify d tecte t il les fuites de m moire Une fois qu un programme finit son ex cution Purify fournit un r sum de ses fuites de m moire MLS Memory Leaked Summary Un r sum de fuites de m moire indique la quantit de la m moire inaccessible durant l ex cution du programme ainsi que l emplacement de chacune d entre elles Un Garbage Collector est form de deux composantes un d tecteur de miettes Garbage detector et un r cup rateur de miettes Garbage Reclaimer Pour atteindre certains objectifs d un Garbage Collector comme par exemple liminer les fuites de m moire sans pour autant courir des risques ou lever les co ts au niveau du temps d ex cution Purify a apport de nouvelles orientations et d importants changements En effet la place de fournir automatiquement un Garbage Collector Purify fournit la place un
73. e lib rer les espaces m moire d j allou s mais non utilis s Diff rentes techniques autant pour l allocation que pour la d sallocation ont t labor es Salagnac 2004 On parlait au d but Chapitre 2 Gestion de la m moire un tat de l art des ann es cinquante d une gestion statique de la m moire pour ensuite passer une gestion dynamique vers le d but des ann es soixante Metropolis et al 1980 Le fait d allouer statiquement de la m moire pour un programme donn signifie avoir pr vu l espace m moire n cessaire avant m me l ex cution du programme et ceci en sp cifiant la quantit de m moire n cessaire partir du code source g n ral Lors de la compilation cet espace m moire sera r serv dans un fichier binaire Au chargement du programme en m moire juste avant l ex cution l espace r serv devient donc accessible Vu que l allocation de la m moire s effectue avant l ex cution de l application un gain au niveau des performances est atteint les co ts de l allocation dynamique l ex cution sont pargn s La m moire statique est imm diatement utilisable Une gestion de m moire statique peut tre vue comme la gestion la plus s curitaire dans le sens o la quantit de m moire consomm e est constante et compl tement connue avant l ex cution Pour les programmeurs dont les besoins peuvent varier de fa on impr visible ce genre de gestion est tr s infl
74. e m moire DirectInput8Create alloue un espace m moire dynamiquement HRESULT WINAPI DirectInput8Create HINSTANCE hinst DWORD dwVersion REFIID riidltf LPVOID ppvOut LPUNKNOWN punkOuter HRESULT hr new HRESULT return hr Figure 5 6 Purify signale une fausse alerte d une fuite de m moire dans AsteroidGame cpp 5 3 2 Les erreurs d acc s Les erreurs d acc s auquel un programme pourrait faire face sont diverses et souvent trompeuses Apr s une premi re analyse de l application Asteroids nous avons trouv quelques erreurs d acc s qui ont t v rifi es tant par notre outil que par Purify Aucune de ces erreurs n a signal le cas d un acc s l gal une zone m moire inappropri e Vu que nous avons acc s au code source de l application Asteroids nous nous sommes permis d injecter le cas d une erreur d un acc s l gal une zone m moire inappropri e voir la Figure 5 7 Chapitre 5 Etude de cas et r sultats exp rimentaux 78 Tableau 5 2 R sultat de d tection des erreurs d acc s Purify D bogueur de m moire Erreurs Temps Erreurs Temps report es coul report es coul el So RS EN NE EN ey so MES RES RER RE RME Le tableau dynamique pMaterials contient un nombre X d ast ro des avec X gt numMaterials Parmi ces ast ro des numMaterials ont explos Tout ast ro de explos est trait par la classe explosion et enregistr dans un fichier
75. e m moire bas sur la programmation par aspect AspectC Debogger void malloc size t rapporte la fonction malloc retrouv e dans n importe quelle classe void maClass malloc size_t rapporte la fonction malloc retrouv e seulement dans la classe maclasse 4 2 1 6 Les conseils Advice Un conseil peut tre vu comme une action activ e par un aspect une fois un point de jointure correspondant est atteint dans le programme cible L activation du code du conseil peut avoir lieu avant apr s ou avant et apr s que le code du point de jointure soit atteint Le langage AspectC permet de sp cifier les conseils gr ce aux mots cl s before pour avant after pour apr s et around qui permet de le faire avant et apr s Voici un exemple de conseil avec before advice call void malloc size t void before cout lt lt x r lt lt endl Incr mente x avant que la fonction malloc ne soit atteinte Maintenant que nous avons fait le tour de tous les concepts fondamentaux que AspectC peut d tenir et pouvons compl ter l exemple de l aspect de la Figure 4 1 La structure du code aspect est similaire celle d un code d une classe en C Notre aspect sera nomm malloc_ counter aspect Malloccounter int x 0 public Liste des coupes transverses advice call void malloc size t void before cout lt lt x lt lt endl incr mentation de x apr s avoir tro
76. e ou pas de le lib rer Durant le processus de correction des fuites de m moire le d veloppeur peut lib rer un bloc de m moire pr matur ment dans ce cas Purify signale le fait qu une ventuelle et inad quate lib ration de m moire s est produite b Notes et limitations Purify trouve seulement les fuites de m moire qui ont t allou es l aide de la fonction malloc et lui est impossible d interagir avec des programmes utilisant autre fonction que cette derni re Par d faut Purify ne peut pas trouver les fuites dans un bloc de m moire manipul par des routines de gestion de m moire que l utilisateur cr er par lui m me Par exemple si un programmeur alloue un grand bloc de m moire et le partage par la suite en plusieurs petits blocs de m moire ce dernier pourrait bien g rer les allocations et les lib rations par lui m me par contre Purify sera dans l incapacit de d tecter les fuites de m moire dans toutes ces subdivisions 2 2 2 3 Purify exp rimental Dans cette section nous allons approcher la version Windows de Purify et voir comment proc der son installation ainsi qu son utilisation Aussi nous avons d cid de capturer des donn es qualitatives associ es au nombre de zones m moire d fectueuses trouv es dans une application test nomm e DebugTest Cette derni re manipulation nous assurera une installation correcte de Purify ainsi que son utilisation conforme 2
77. e pour Purify et qu AspectC Debogger a pu en venir bout Les erreurs de d passement de tampon sont couvertes par les deux outils la seule diff rence c est que AspectC Debogger suscite un gain d espace m moire dans sa mani re d tecter ce type d erreur Pour les syst mes ayant des ressources limit es en espace m moire AspectC Debogger pourrait tre pr f rable 5 4 2 Coexistence d une gestion implicite et explicite de la m moire M me si notre objectif est de fournir une gestion implicite et s curis e de la m moire pour le langage C il reste tout de m me important de conserver et de pouvoir utiliser les m thodes que le langage C fourni Le mod le de conception de notre outil permet une coexistence entre une gestion implicite et explicite de la m moire On peut prendre le cas d une ventuelle fuite de m moire notre outil donne la possibilit au programmeur de juger Chapitre 5 Etude de cas et r sultats exp rimentaux 82 de l utilit ou l inutilit d un espace m moire qui n est pas encore lib r Il lui suffit de mettre une variable boolienne true et l espace m moire est lib r d une mani re s curis e D un autre c t le programmeur pourra en tout temps r cup rer la m moire explicitement en usant des diff rentes fonctions dont le langage C dispose delete free Si c est le cas notre outil assurera que des erreurs d acc s ne se produisent pas par exemple r
78. e s curis e 4 4 Conclusion Au sein de ce quatri me chapitre nous avons introduit les concepts fondamentaux d AspectC utilis s dans notre outil pr sent l outil de d bogage AspectC Debogger montr quelques exemples d utilisation pour ensuite d tailler la r alisation de notre outil de d bogage de m moire pour C Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 68 de m moire bas sur la programmation par aspect AspectC Debogger En effet nous avons impl ment une m thode de gestion et de contr le des pointeurs afin d assurer le d bogage de la m moire dynamique On a choisi de lister les pointeurs dans une liste doublement chain e Chaque l ment de la liste correspond a un pointeur et contient des informations au sujet de son allocation En se basant sur ces informations une s rie de tests est tablie afin de valider tout acc s ou traitement des donn es allou es dynamiquement Aussi nous avons d taill dans ce chapitre les diff rents aspects responsables de instrumentation du code de l application cliente Chaque aspect tant impl ment s par ment nous nous sommes servis d un tisseur AspectC pour son int gration et tissage au niveau de l application cliente AspectC 2008 La totalit des fonctionnalit s offertes et group es constitue l outil AspectC Debogger Le Chapitre 5 portera sur une valuation de ce dernier Une tude de cas com
79. eas Gal et Wolfgang Schroder Preikschat AspectC An Aspect Oriented Extension ro the C Programming Language Australian Computer Society Inc Proceedings of the 40th International Conference on Technology A Sioud Gestion de cycle de vie des objets par aspects pour C dans un m moire pr sent l Universit de Qu bec Chicoutimi juin 2006 B Stroustrup The C Programming Language Addison Wesley Third Edition and Special Edition 2004 Olaf Spinczyk Daniel Lohmann et Matthias Urban AspectC extension de la programmation orient e aspect pour C Software Developer s Journal 6 2005 P Tarr H Ossher W Harrison and S M Sutton Jr N Degrees of Separation Multi Dimensional Separation of Concerns ICSE 21 pp 107 119 1999 http Avww tiobe com classement des langages les plus utilis s Syrine Tlili Automatic Detection of Safety and Security Vulnerabilities in Open Source Software A thesis in The Department of Electrical and Computer Engineering Concordia University Emil Vassev et Joey Paquet Aaron Dailey Aspects of Memory Management in Java and C Department of Computer Science and Software Engineering Concordia University Valgrind home page http valgrind org June 2008 Alavoor vasudevan Comment programmer en C v16 0 Ao t 2000 Complete manual of Valgrind http www valgrind org info about html G Vaysse http afpac gforge inria fr do
80. ec les aspects non fonctionnels se traduit par l tablissement de jonctions Ces jonctions se situent au niveau d un ensemble de points de jonction du flot d ex cution du noyau Kicsales et al 1997 Cet ensemble de points porte le nom de pointcut et tout point de ce flot d ex cution constitue un point de jointure potentiel susceptible d tre utilis pour l int gration Ainsi une invocation de m thode une boucle ou une affectation pourrait tre des points de jointure potentiels Enfin viens le r le du conseil ou greffon qui est un fragment de code ins rer dans les points de jonction Le conseil implante une pr occupation transverse qui regroupe un ou plusieurs domaines Notons que la vari t des points de jointure potentiels qui peuvent tre d sign s dans la configuration d pend fortement de la mise en uvre de la programmation par aspect Ces concepts sont implant s dans les langages de programmation tels que C AspectC Spinczyk O et al 2002 TACO Vaysse 2005 Java AspectJ Aspect 2001 et Lesiecki 2002 AspectWerkz AspectWerkz 2005 et JAC JAC 2006 Selon la technique de tissage les tisseurs peuvent tre class s en deux cat gories e un tissage statique par instrumentation du code source ou du pseudo code machine interm diaire AspectJ AspectJ 2001 et AspectWerkz AspectWerkz 2005 e un tissage dynamique lors de l ex cution du logiciel AspectC Spinczyk O et al 2002
81. ejeter une r cup ration qui a d j t faite via notre outil L outil Purify se contente juste d afficher les erreurs d tect es l aspect d une coexistence entre une gestion implicite et une gestion explicite de la m moire n est pas trait pas ce dernier 5 4 3 Ralentissement de l application cliente et diminution de performances Les r sultats de notre exp rience appuient les constatations de Hursley En effet une instrumentation par aspect g n re un ralentissement de 30 sur l ex cution de programmes usuels IBM Hursley 2002 M me en ayant subi des am liorations AspectC reste tout de m me une nouvelle technologie et nous n avons pas bu atteindre un gain de temps lors de l instrumentation de l application cliente Tout au contraire l outil Purify s est av r beaucoup plus rapide Nous esp rons qu avec des versions plus r centes d AspectC les erreurs impr visibles seront de moins en moins rencontr es ce qui procurera plus de rapidit pour les tisseurs d aspect 5 4 4 G n ricit de l outil Il est certes plus ardu de penser g n rique lors de la conception d un logiciel mais si cela est fait la maintenabilit et l volution s en trouvent grandement facilit es laissant le champ libre des volutions futures Dans le cas de notre outil le terme g n ricit est de taille La programmation par aspect incarnant la s paration des pr occupations et formant u
82. er pourrait prendre des jours pour enfin r ussir l liminer Ceci est d au raccordement fr quent retard et coincident entre la cause g n ralement une corruption de m moire et le sympt me typiquement un crash du la lecture d une donn e invalide 2 1 3 2 Les fuites de m moire Memory Leaks Les fuites de m moire Memory Leaks sont les zones de m moire allou es mais non utilis es ou non accessibles par le programme La pr sence de ce type d erreurs cause un ralentissement au niveau de l ex cution du programme CiteSeer 1990 Ceci est principalement d une augmentation de pagination qui peut engendrer un manque de m moire out of memory Les fuites de m moire sont plus difficiles d tecter que les acc s ill gaux aux zones m moire et se produisent suite un oubli de lib ration elles sont donc des erreurs d inattention Contrairement des erreurs classiques de gestion de m moire qui sont directement observables les fuites de m moire quant elles ne font que contribuer la d gradation de l ex cution globale du programme M me d tect es elles restent toujours difficiles corriger CiteSeer 1990 En effet une lib ration pr matur e d un espace m moire peut engendrer des erreurs d acc s qui engendreraient leurs tours des probl mes aux Chapitre 2 Gestion de la m moire un tat de l art comportements irr guliers C est pour cette raison que la correctio
83. es piles de m moire en rouge Ces zones m moires sont non allou es et non initialis es C est a dire soit qu elles n ont jamais t allou es ou encore qu elles l ont d j t mais lib r es par la suite Il est ill gal de lire d crire et de lib rer une zone de m moire colori e en rouge celle ci n est pas encore la propri t du programme elle est non allou e et non initialis e Jaune On attribue la couleur jaune chaque zone m moire retourn e par la fonction malloc ou encore l op rateur new Une zone m moire de couleur jaune signifie qu elle a t allou e et qu elle est en la possession du programme mais elle reste toujours non initialis e L criture sur une zone m moire jaune est possible de m me que sa lib ration Par contre il est ill gal de lire une zone m moire tiquet e en jaune car elle est encore non initialis e Vert Si on effectue une op ration d criture sur une zone m moire jaune Purify l tiquette en vert Cela veut dire que cette zone m moire a t allou e et initialis e II est tout fait l gal de lire d crire et de lib rer une zone m moire tiquet e en vert Bleu Une fois qu une zone m moire est lib r e Purify l tiquette en bleu Une zone m moire bleue est initialis e mais pas pour autant accessible Il est ill gal de lire d crire et de lib rer une zone m moire tiquet e en bleu b Comment Purify contr
84. estion de la m moire un tat de l art Purify a t capable de d tecter les six erreurs inject es On peut se r f rer la Figure 2 10 et a la Figure 2 11 pour les captures d cran des r sultats e 2 fuites de m moire e 1 erreur de lecture au del des limites d un tableau e 1 acc s invalide un pointer e 1 erreur de lecture d une zone de m moire non initialis e e 1 erreur de d passement de tampon 2 2 3 Memcheck Memcheck est un v rificateur de m moire grande capacit Il permet la v rification de toutes les instructions d criture et de lecture et l interception des appels de fonction et d op rateur comme malloc new free et delete Par cons quent Memcheck est dans la possibilit de d tecter les probl mes suivants e l utilisation d une zone m moire non initialis e e _lecture criture d une zone m moire apr s qu elle a t lib r e e lecture criture au del d un bloc de m moire retourn par la fonction malloc e lecture criture d une zone inad quate dans une pile e fuite de m moire lorsqu un pointeur sur un bloc de m moire retourn par la fonction malloc est perdu a jamais e mauvaise utilisation de malloc new new et free delete delete Memcheck utilise une instrumentation binaire et dynamique afin d analyser un programme client et ce durant son temps d ex cution L ex cution du code instrument est entre cal e
85. estion de la m moire dynamique sans erreur L id e est d utiliser la programmation par aspect pour mettre au point un gestionnaire de pointeurs Le principe m me de cette approche se r sume dans le fait de lister tous les pointeurs allou s tous au long de l ex cution du programme et d ajouter chaque pointeur une s rie d informations indiquant les manipulations permises sur le pointeur Chapitre 3 Pr occupations et aspects 46 ou sur l objet auquel il r f re La Section 4 3 3 du Chapitre 4 nous donnera plus de d tail sur cette approche Lors de chaque op ration d ajout de suppression ou encore de modification de l objet r f renc une s rie de v rifications est appel e pour s assurer de la conformit de ces manipulations Ainsi l adjonction des aspects se fera dans des endroits biens pr cis du programme e chaque invocation de l op rateur new un objet est cr un pointeur r f ren ant ce m me objet sera ajout directement la liste des pointeurs e chaque manipulation d un objet r f renc par un pointeur des s ries de v rifications seront appel es et des mises jour seront affect es au niveau de information accompagnant le pointeur m me e chaque invocation de la fonction delete l objet et son pointeur seront supprim s Mais avant toute manipulation de ce genre des s ries de v rifications sont appel es avant et apr s la suppression AspectC est uti
86. ework pour 27 Chapitre 2 Gestion de la m moire un tat de l art la cr ation d outils utilisant une instrumentation binaire et dynamique Nethercote and Seward 2003 En effet Valgrind est charg d effectuer les t ches consid r es comme les plus difficiles en ins rant l instrumentation au niveau du code machine et ce lors du temps d ex cution Les outils que le noyau Valgrind Valgrind core supporte comme plugin sont crits en C La structure de base est comme suit Le noyau de Valgrind Le plugin d outil L outil Valgrind 2 2 3 2 Valid value V bits Dans cette section et celle qui s en suit nous allons nous int resser ce que Memcheck analyse et surtout a la fagon dont il le fait Il est plus simple de penser 4 Memcheck mettant en application une unit centrale de traitement synth tique CPU qui serait identique une vraie unit centrale de traitement except un d tail crucial chaque bit litt ralement parlant des donn es qui seront stock es et trait es par le vrai CPU aurait dans le CPU synth tique un bit Vbit associ indiquant si le bit qu il accompagne aurait ou pas une valeur l gitime Par exemple si un CPU charge dans la m moire un mot dont la taille est gale 4 octets il charge galement les 32 V bits correspondant partir d un bitmap La pr sence des V bits ne veut pas dire que Memcheck va forc ment effectuer une v rification ou encore signaler une erreur Le con
87. exible et insuffisant Metropolis et al 1980 Prenons l exemple d une application informatique qui a besoin de 50 entiers comme entr e initiale Le programmeur alloue un tableau statique pouvant contenir 100 entiers il pr voit le cas o l application aurait augmenter le nombre de ces entr es Si un jour l application prend de l ampleur et n cessitera un nombre d entr es beaucoup plus grand une red finition des espaces allou s serait n cessaire Le cas o cette situation se retrouve partout dans un code source constitue une grave probl matique Par cons quent il est important d avoir une gestion dynamique de la m moire pour viter une red finition obligatoire des espaces m moire d un programme limite de gestion statique de la m moire Contrairement l allocation qui ne peut se faire qu explicitement la lib ration quant elle peut se faire de deux mani res soit explicitement manuelle soit implicitement automatique Dans le cas d une d sallocation explicite le programmeur se retrouve avoir un contr le direct sur la lib ration de la m moire Aucun espace m moire ne pourra tre lib r sans des instructions venant directement du programmeur La plupart des langages de programmation offrent des fonctions afin de permettre cette d sallocation explicite On peut citer les fonctions delete et free dans le cas du langage de programmation C Un principal avantage de ce genre de d sallocation
88. fin de l application Demarrage du chrono h iGo pointcut Mat execution genererMatrice amp amp within conteneur advice Mat after detection de la fonction principale CHRONO MAT h iStopAndAdd printf n temps ecoulee d n h m FILE F E F fopen c ApplicationRunTime txt wt fprintf F d h m fclose F endif ChroncAspect
89. g and try again Aucune fen tre de dialogue n tait affich e et le seul recours tait d arr ter le processus l aide du gestionnaire de t ches de Windows or r View HeloWond ve veto Rational Purity Data Browse ET File Edit View Settings Window Help cH SR M HD Boe se Aw Summary of all memory leaks 92 bytes 2 blocks a amp MLK Memory leak of 80 bytes from 1 block allocated in mair Distribution of leaked blocks Allocation location new UINT nev cpp 23 main c tempNhel loworld helloworld cpp 18 E temp Helloworle Fun 047277 printf s n mystr sone array problems int pArray new int 20 menory ve menset p rray 0 20 sizeof int p rray i0 47 obvious out of bounds printf invalid memory d p rray 5 8 mainCRTStartup crt0 c 206 amp MLE Memory leak of 12 bytes from 1 block allocated in nair oe Commanwre AE IT Lam AT en Jun nam rE meam mm 4 Displayed Errors 2 of 2 Displayed Warnings 3 of 3 Bytes leaked 92 0 Figure 2 11 Capture d cran pour les d tails des erreurs de DebugTest IBM Software 2003 c Les erreurs d tect es dans DebugTest Afin de valider notre compr hension de la mani re avec laquelle Purify est mis en place et comment interpr ter ses r sultats nous avons inject plusieurs erreurs de gestion de m moire dans l application test DebugTest Hagen et Zhang 2002 Chapitre 2 G
90. gure l 1 Fr quence d utilisation du langage CH ss ncevesetocucsatsagei nd cacevsnstsccteisdpasautnonee 2 Figure 2 1 Disposition de la m moire nement ust pasnesonidacaecocncn tt editer 11 Figure 2 2 Cas de presence d une fuite de M MOIS ben A derriere tendent 14 Figure 2 3 A et B avant le d passement de tampon 16 Figure 2 4 A et B apr s le d passement de tampon 16 Figure 2 5 Purify tiquette les tats de m moire par couleur 18 Figure 2 6 Erreur d criture hors de la limite d un tableau 19 Figure 2 7 Disposition des espaces MOMOITE sscte sc sessseisviecdeevevensunatesscnsededducanecsenaisnesenraiens 20 Figure 2 8 Structure InfoPointeur et allocation de donn es avec deux espaces Suppl ment ites aiment are el 21 Figure 2 9 Acc s l gal une zone m moire inappropri e eee ese cree seeeeeeeseeeeneeeoneee 21 Figure 2 10 Capture d cran du r sum des erreurs de DebugTest ssccscsscsessesensecsessees 24 Figure 2 11 Capture d cran pour les d tails des erreurs de DebugTest 25 Figure 2 12 Utilisation non s curis e d un tableau de bit 27 Figure 2 13 Memcheck ne d tecte pas les erreurs d acc s hors de la limite d un tableau 29 Figure 3 1 Les exigences non fonctionnelles traversent la modularisation fonctionnelle du SYST ME is mean nier ne ere legis Tetra ren en AEE ges dans de dunes d ele 35 Figure 3 2 Int gration du code
91. hniques architecturales Les pr occupations fonctionnelles d crivent le comportement du syst me et d finissent les fonctions ou les services que le syst me doit remplir Ce sont des pr occupations relatives au domaine d application Or les pr occupations non fonctionnelles expriment les qualit s ou contraintes impos es sur la mani re de satisfaire les exigences fonctionnelles Il s agit principalement des pr occupations de performance s curit s ret convivialit concurrence etc Chapitre 3 Pr occupations et aspects 35 La Figure 3 1 montre un exemple d une application compos e de trois modules fonctionnels dans lesquelles on a d y ins rer l impl mentation d exigences de performance de journalisation enregistrement d informations dans un fichier journal et de Module 1 Module 2 Module 3 synchronisation Figure 3 1 Les exigences non fonctionnelles traversent la modularisation fonctionnelle du syst me Les exigences non fonctionnelles qui traversent la modularisation fonctionnelle du syst me posent un probl me capital qu on peut identifier facilement sur la Figure 3 1 En effet on peut remarquer la dispersion ou l enchev trement du code traitant un aspect du syst me travers diff rents modules par exemple la synchronisation Consid rons un langage orient objet l unit fonctionnelle est le package et si nous raffinons encore la d coupe cette unit est la classe I n e
92. ib rant l espace m moire qu il occupait au moyen de la fonction delete 30 Chapitre 2 Gestion de la m moire un tat de l art 2 3 2 Probl mes actuels avec les compilateurs C Puisque le langage C est une surcouche du langage C il comporte alors tous les d fauts de ce dernier Par exemple dans la programmation C les fuites de m moire et les d bordements sont tr s courants en raison de l utilisation des fonctionnalit s telles que les types char char les fonctions de manipulation de cha ne comme strcpy strcat strncpy strncat et les fonctions de manipulation de m moire comme malloc realloc strdup Vasudevan 2000 L utilisation de char et strcpy cr e d affreux probl mes dus au d bordement overflow aux acc s hors limite fence past errors aux alt rations des emplacements en m moire ou aux fuites de m moire Les probl mes de m moire sont extr mement difficiles 4 d boguer et tr s longs corriger et liminer Ils diminuent la productivit des programmeurs Certains programmeurs se basent sur diff rentes m thodes destin es r soudre les d fauts de la gestion de m moire en C pour augmenter cette productivit Les bogues li s la m moire sont tr s durs liminer et m me les programmeurs exp riment s y passent plusieurs jours semaines ou mois pour en venir bout La plupart du temps les bogues de m moire restent tapis dans le code durant plusieurs mois et peuvent
93. ie que cette zone n a pas t modifi e Pour l initialisation on crit une cha ne simple par exemple on peut partir d une valeur fixe puis on incr mente chaque it ration La taille de cette zone m moire ajout e ne doit pas tre trop importante car chaque pointeur prendra cette taille en plus Dans notre cas et comme l indique la Figure 4 7 on choisit d allouer 16 octets en plus Pour mettre en pratique ce raisonnement on fait appel la m thode New PrepareOverflow qui prend comme argument un pointeur de type InfoPointeur void Malloc_PrepareOverflow InfoMalloc info La m thode New_PrepareOverflow se charge de calculer la position du tampon anti Overflow pour ensuite le remplir avec des valeurs fix es Calcule la position du tampon anti overflow ptr char info sizeof InfoMalloc info gt taille Remplit le tampon avec des valeurs fix es for i 0 i lt TAILLE TAMPON OVERFLOW i ptr rand ptr rand Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 65 de m moire bas sur la programmation par aspect AspectC Debogger 4 3 3 2 Validit d un pointeur Pour tester la validit d un pointeur on effectuera diff rentes v rifications dont certaines seront plus simples que d autres Par exemple v rifier que si la taille de l espace allou n est pas nulle alors un message d erreur doit tre rapport if size 0 ERREUR Taille
94. il cpp kay Header Files _ AspeciC Add in AsteroidField h Do you want to enable AspectC for Project camera h in Cockpit h h Debris h dhPastFont h Asteroid Game Figure 5 2 Activer AspectC Add In sous le projet Asteroids Ze Asteroid Game Microsoft Visual Studio Edit View Window Community P Debug PurifyPlus Build Debug Tools Help Win32 File Project Bifndef FIRSTASPEC define FIRSTASPECT amp EY aspect Files include lt stdio h gt ni iG Active Aspects include lt iostream gt i bs TestAspact ah include lt string h gt Inactive Aspects include lt stdlib h gt 2 TestAspect2 ah include lt stdarg h gt 1G D3D Header Files inf conteneur h include lt tchar h gt d3dapp h include conteneur h d3dfile h i d3dres h if A NE Biase et RE NENNE E eS ea Ee eke SES PO ale d3dutil h ih h L i E oy tS ie D3D Source Files d3dfile cpp dsutil h dxutil h MallocFree h stdafx h d3dspp cpp Figure 5 3 Asteroids Visual Studio 2005 et AspectC Add In public void operator new size_t size aspect Firstispect Chapitre 5 Etude de cas et r sultats exp rimentaux 74 Afin de rendre transparent et de faciliter aux programmeurs utilisateurs l analyse et le d bogage de la m moire nous avons mis au point une interface derri re laquelle s ex cute cette tape d
95. ilpUserTime amp stUser startTime stUser wMilliseconds 1000 stUser wSecond 60 stUser wMinute 60 stUser wHour 24 stUser wDay 1 Renvoie le temps CPU du processus en millisecondes coul depuis le lancement du chrono unsigned int iStop FILETIME ilpCreationTime FILETIME ilpExitTime Annexe 98 FILETIME ilpKernelTime FILETIME ilpUserTime SYSTEMTIME stUser GetProcessTimes ihP amp ilpCreationTime amp ilpExitTime amp ilpKernelTime amp ilpUser Time FileTimeToSystemTime amp ilpUserTime amp stUser return stUser wMilliseconds 1000 stUser wSecond 60 stUser wMinute 60 stUser wHour 24 stUser wDay 1 startTime Ajoute le temps CPU du processus en millisecondes coul depuis le lancement du chrono la m moire void iStopAndAdd endif NewSecurise ah ifndef FIRSTASPECT define FIRSTASPECT include lt stdio h gt include lt iostream gt include lt string h gt include lt stdlib h gt include lt stdarg h gt securise la gestion de wire afin de s assure fgestion n est en place eviter les con void operator new size_t size CEN RI a OR A e e e e e he e I ROI A KR ke e ke KR kk a NT printf printf s n ligne lu FILE __LINE_ printf n changelment de l op rateur new return malloc size void operator new size_t s printf MAR EE RER eR ff JKR k h de dekek k RR de e kke RE printf
96. inon ptr pointe sur les informations de d bogage InfoMalloc bool Malloc_TamponOverflowIntact const InfoMalloc info Conteneur Malloc ste des pointeurs allou s Affiche un message d erreur puis quitte le programme void ERREUR char message Calcule la somme de v rifix ion checksum des donn es d unpointeur Annexe 96 unsigned long MallocCalculeSomme const InfoMalloc info Fonction qui crit les informations d un pointeur et modifie son fadresse pour qu il pointe sur les donn es InfoMalloc MallocPreparePtr InfoMalloc info size t size const int nom fich unsigned long num ligne Ajoute un pointeur au conteneur malloc void ConteneurMalloc Ajoute InfoMalloc info V rifie les informations sur un pointeur void VerifieInfoMalloc InfoMalloc info Affiche le contenu du conteneur malloc lib re les pointeurs si libere mem true void ConteneurMalloc Affiche bool libere mem Sort un pointeur du conteneur malloc void ConteneurMalloc Remplace InfoMalloc info InfoMalloc nv_info Sort un pointeur du conteneur malloc void ConteneurMalloc_Efface struct PtrChaineMalloc elem free s curis utilis pour le conteneur void FreeSecurise const void ptr const char nom_fich const Calcule la taille r elle d un bloc allou size_t MallocCalculeTaille size_t size void affiche Info InfoMa
97. iser des pr occupations touchant aux m mes entit s Dans la section suivante nous allons introduire la notion de programmation par aspect autant que technique de s paration de pr occupations montrer ses avantages et motivations puis pr senter l outil AspectC avec lequel nous allons pouvoir mettre en pratique notre d bogueur de m moire AspectC Debogger qu on pr sentera en d tail dans le Chapitre 4 Chapitre 3 Pr occupations et aspects 37 3 3 Programmation par aspect POA Pour les probl mes de recoupement et les cons quences n gatives qui en r sultent la programmation par aspect se trouve tre la solution l gante et la plus facile 4 impl menter Celle ci a t introduite par des chercheurs du XEROX PARC en 1997 Kicsales er al 1997 Cette nouvelle approche peut tre consid r e comme l approche cl pour l ing nierie des applications complexes telles que les applications distribu es les Entreprises Ressources Planning ERP et bien d autres 3 3 1 Descriptions L POA est une m thode de programmation dont le but est de s parer l impl mentation de toutes les exigences fonctionnelles ou non d un logiciel Le principe est donc de coder chaque probl matique d une fa on ind pendante et ensuite de d finir leurs r gles d int gration afin de pouvoir les combiner en vue de former le syst me final Contrairement l approche orient e objet cette nouvelle technique permet aux prog
98. it Purify Memcheck est capable de bien analyser ou de manipuler correctement un code traitant des d finitions partielles d octet par exemple le cas o l on utilise les deux idiomes communs aux langages C et C les tableaux de bits ou encore le type bitfield dans les structures de donn es Dans de telles circonstances et avec un outil d analyse dont le niveau de granularit ne d passe pas l octet on ne pas garantir des r sultats pr cis Dans la Figure 2 12 on montre un programme utilisant un bit non initialis dans un tableau de bit bit array Dans ce cas Memcheck rapporte l erreur contrairement Purify qui ne la d tecte pas Nethercote et Seward 2005 void set bit int arr int n arr n 32 1 lt lt n 32 int get_bit int arr int n int main void return 1 amp arr n 32 gt gt n 32 int arr malloc 10 sizeof int set_bit arr 177 printf S d n get_bit arr 178 Erreur bit 178 return 0 n est pas accessible Figure 2 12 Utilisation non s curis e d un tableau de bit 2 2 3 1 Valgrind Memcheck fait partie d une suite d outils de Valgrind un logiciel gratuit GPL qui fonctionne seulement sur la plate forme de x86 Linux des travaux sont actuellement en cours pour lui permettre de communiquer avec d autres plateformes telle que AMD64 Linux Memcheck est impl ment comme un plugin Valgrind qui est son tour un fram
99. jeu Asteroids 5 2 AspectC Debogger et l int gration de ses principaux composants Cette tape que nous avons appel e int gration des principaux composants fut une tape assez d licate Elle se pr sente comme suit Chapitre 5 Etude de cas et r sultats exp rimentaux 72 5 2 1 Visual Studio 2005 et AspectC Add in Pour l tape de conception et de tissage des aspects nous avons opt pour l outil AspectC Add In for Microsoft Visual C ce dernier est connu pour sa facilit d obtention ainsi que sa facilit d utilisation Sioud 2006 Comme son nom l indique cet outil de tissage d aspect n cessite un Microsoft Visual comme environnement de travail d o notre choix pour Microsoft Visual Studio 2005 AspectC Add In est un produit appartenant un fournisseur de solutions et d outils informatiques connu sous le nom de pure systems pure systems 2010 Son int gration au sein de Microsoft Visual Studio 2005 a n cessit une licence qu on a obtenue gratuitement dans un premier temps Ensuite il a fallu n gocier l obtention de cette m me licence avec un des membres de l quipe de pure systems se trouvant en Allemagne Cette licence n tait plus disponible et devait tre renouvel e chaque 30 jours Une licence permanente nous a t fournie afin de pouvoir finir notre projet de m moire 5 2 2 Int gration du jeu Asteroids sous Visual Studio 2005 Afin de pouvoir ex cuter le jeu Asteroids s
100. l image d un m tier tisser va donc composer le syst me final en se basant sur des r gles et des modules qui lui ont t attribu s Chapitre 3 Pr occupations et aspects 39 Code des aspects 1 j j j i 4 t t Int gration Weaver Code du syst me g n r a Moule Module Sim HE Ess a Figure 3 2 Int gration du code des composantes et des aspects pour former le syst me final L impl mentation s par e des pr occupations permet d viter la duplication du code Lorsque chaque module s adresse toujours une seule probl matique il est beaucoup plus facile de comprendre le code et de proc der des changements Les syst mes orient s aspect sont beaucoup plus volutifs pour deux autres raisons Premi rement vu que les modules ne sont pas au courant des probl matiques qui se recoupent il est plus facile d ajouter de nouvelles fonctionnalit s au syst me Deuxi mement si on veut plus tard rajouter une exigence non fonctionnelle comme la synchronisation il suffit de cr er un nouvel aspect qui s en occupe sans toucher au code des composantes existantes Tarr et al 1999 Aussi avec POA on trouve moins de difficult sur le plan de la conception qu avec une approche plus classique Avec les langages traditionnels le concepteur doit pr voir a l avance les l ments susceptibles de changer dans l architecture de son syst me Il en r sulte ce que certains appe
101. laires pourraient ne pas pouvoir r utiliser le module tel quel entra nant de nouveau une diminution de la productivit moyen terme D Diminution de la qualit du code les programmeurs ne peuvent pas se concentrer sur toutes les contraintes la fois L impl mentation disparate de certaines pr occupations peut entra ner des effets de bords non d sir s i e des bugs E Maintenance et volutivit du code difficile lorsque l on veut faire voluer le syst me on doit modifier de nombreux modules Modifier chaque sous syst me pour r percuter les modifications souhait es peut conduire des incoh rences Vu que les m thodes de programmation traditionnelles sont incapables de fournir une modularisation car il est difficile d en limiter la port e dans un module ou art fact bien circonscrit de nouveaux paradigmes commun ment regroup s sous le nom de d veloppement de logiciel orient aspect ou AOSD pour Aspect Oriented Software Development apportent des solutions simples et l gantes ces probl mes Baltus 2000 En effet la programmation par aspect qui sera notre approche cible Kicsales et al 1997 permet de modulariser des exigences non fonctionnelles telles que la s curit la persistance la journalisation le tra age etc La programmation par sujet Harisson et Ossher 1993 et ses descendantes Tarr t al 1999 ou la programmation par vues Mili et al 1999 quant elles permettent de modular
102. le nom d une fonction ou d un attribut dans le cas d une surcharge d un op rateur e Result result Retourne un pointeur vers l emplacement m moire d sign par la valeur r sultat 0 si la fonction ne retourne aucune valeur Dans notre cas on utilisera cette fonction pour passer en param tre l adresse de chaque espace m moire que l op rateur new allouera e args type pattern Retourne une liste des types filtr s pour des m thodes ou des attributs avec une expression de correspondance dans le cas d un constructeur par copie e void proceed Ex cute les points de jointure dans un conseil around 4 2 2 2 Exemple de collection de donn es lors d une allocation et d une d sallocation Les exemples suivants pr sentent un code aspect pour une allocation de m moire a travers l op rateur new et une d sallocation travers la fonction delete Ils utilisent des fonctions membres de la classe JoinPoint afin d extraire la taille de l espace m moire le pointeur allou et le pointeur d sallou advice call void new amp amp args size around size_t size printf taille de la m moire ld n size tjp gt proceed printf Pointeur allou p n tjp gt result e args size Choisit tous les appels ou ex cutions des points de jointure ayant size comme argument Ainsi on s pare les fonctions qui ont size comme argument de celles qui ne l ont pas Chapit
103. ler le num ro de l tage atteindre Mettre le num ro de l tage dans la zone de m moire r serv e Sommes nous d j l tage cible a Si oui i aucune instruction fin du programme b Si non i attendre jusqu ce que l ascenseur soit vide atteindre l tage cible lib rer la zone m moire qui sert de rappel pour le num ro Figure 2 2 Cas de pr sence d une fuite de m moire Marguerie 2009 14 Chapitre 2 Gestion de la m moire un tat de Part Une fuite de m moire s est gliss e dans cette s rie d instructions supposons que l utilisateur est l tage 2 et qu il demande d aller au m me tage Dans ce cas les lignes 1 2 et 3 a i seront ex cut es et la ligne 3 b iii ne sera jamais ex cut e vu que l instruction 3 a i met fin au programme L ex cution du programme prend fin sans que l espace m moire r serv la ligne 1 ne soit lib r fuite de m moire Ce cas d erreur n a pas un effet imm diat sur le fonctionnement du programme Par contre apr s une r p tition excessive de fuite de m moire l ascenseur manquera d espace m moire Une telle circonstance pourrait ne jamais tre d couverte m me avec des essais relativement complets Les cons quences dans le cas o un dysfonctionnement de l ascenseur se produit sont tr s d sagr ables du moins l ascenseur cesserait de r pondre aux demandes de ses utilisateurs et ne pourra plus se d pl
104. lis afin i d laborer les diff rents aspects qui g rent la cr ation des objets ii le listage de leur pointeur correspondant iii toute action associ e ces m mes objets cr ation modification etc iv et enfin leurs suppressions Le Chapitre 4 d crit les diff rentes tapes de l laboration de notre outil Le Chapitre 5 inclut une comparaison de notre outil avec celui de Purify et ce travers une tude de cas Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage de m moire bas sur la programmation par aspect AspectC Debogger 4 1 Introduction Nous avons vu dans le Chapitre 2 qu en plus du fait que le langage C ne b n ficie pas d un gestionnaire implicite de m moire les erreurs dues une mauvaise gestion de m moire sont assez fr quentes Plusieurs outils con us sp cifiquement pour g rer la m moire au sein d une application C ont t mis au point notamment chez la firme IBM Purify User s Guide 1999 Cette firme a opt pour une instrumentation et une analyse au niveau du code objet ou encore d autres travaux de diff rents chercheurs et praticiens qui ont opt pour une instrumentation au niveau du code binaire Valgrind Manual 2008 Dans ce chapitre nous pr senterons notre outil de gestion de m moire pour le langage C qui utilisera une instrumentation par aspect 4 2 Gestion de m moire par aspect travers un outil de gestion de m moire
105. llent la paralysie par l analyse i e le fait qu un d veloppeur ne sache jamais quand s arr ter dans la sp cification du design de son syst me La programmation orient e aspect diminue fortement ce risque puisqu il est toujours possible de rajouter des aspects qui n avaient pas n cessairement t pr vus l avance Et comme dernier avantage en se basant sur une approche orient e aspect et en cas de bogue un programmeur a tendance trouver plus facilement la source du probl me au niveau du code Les d veloppeurs passent moins de temps essayer de comprendre la s mantique des instructions et gagnent donc un temps consid rable Chapitre 3 Pr occupations et aspects 40 3 3 3 Int gration des aspects Pour construire une application a partir de diff rents aspects d finis s par ment les uns des autres une tape d int gration est forcement n cessaire Cette tape est appel e composition des aspects ou encore tissage des aspects C est l o le compilateur d aspect ou weaver permet d appliquer les aspects aux composantes et ceci au moyen d un langage d aspect proc dural simple fournissant des op rations sur des m thodes et des classes d velopp es dans les composantes fonctionnelles Techniquement un aspect est une entit regroupant un ensemble de conseil advice de point de jonction joinpoint ou encore des coupes transverses pointcut L int gration des composantes d une application av
106. lloc info void ConteneurMalloc_Ecrire int Return_taille NewFree h ifndef MALLOCFREE H define MALLOCFREE_H include lt stdlib h gt include conteneur h class Malloc public static Conteneur C public Malloc f Allocation de m moire s curis e malloc test si malloc renvoie NULL Annexe 97 void MallocSecurise void PrincipalP size t size const int nom_fich const unsigned long num ligne free s curis utilis pour le conteneur void FreeSecurise void ptr const int nom fich const unsigned long num_ligne endif Chrono h Classe Chronometre permet de mesurer le temps du processus courant id r est le UserTime du processus soit le temps pendant me ex cute du code appartenant s uniquement ifndef chronoH define chronoH include lt stdio h gt include lt windows h gt class Chrono Handle du processus courant HANDLE ihP Temps CPU lors du d clenchement unsigned int startTime public m moire du chrono unsigned int m Constructeur Chrono reset mise z ro de la m moire void reset Lance le chronom tre void iGo FILETIME ilpCreationTime FILETIME ilpExitTime FILETIME ilpKernelTime FILETIME ilpUserTime SYSTEMTIME stUser ihP GetCurrent Process GetProcessTimes ihP amp ilpCreationTime amp ilpExitTime amp ilpKernelTime amp ilpUser Time FileTimeToSystemTime amp
107. logiciels a pouss les praticiens se poser des questions aussi bien fondamentales c est quoi la relation aspect pr occupation quels types de pr occupation peuvent tre s parables composables que techniques comment utiliser une technique particuli re pour r soudre un probl me particulier Ce chapitre d crit une approche existante qui pourrait r pondre aux probl mes d volution et d adaptation logicielle tels ceux cit s dans le Chapitre 2 Ce chapitre s articule sur les trois principaux points suivants e un outil conceptuel d velopp par les chercheurs et praticiens sera pr sent la s paration des pr occupations separation of concerns e la programmation par aspect ses motivations et son fonctionnement seront aussi pr sent s AspectC un outil impl mentant la programmation par aspect sera d taill par la suite Chapitre 3 Pr occupations et aspects 34 e enfin nous mettrons l accent sur la probl matique de notre recherche et citerons les objectifs atteindre 3 2 S paration des pr occupations Les syst mes informatiques r pondent un ensemble d exigences du client plus ou moins bien d finies L impl mentation de certaines de ces exigences dans les langages de programmation actuels n est pas toujours bien circonscrite On se retrouve donc avec des probl matiques dont les impl mentations se retrouvent un peut partout dans les modules du syst me C est ce qu on
108. m me limite En effet gr ce aux tests d crits la Section 4 3 3 2 du Chapitre 4 chaque adresse m moire est valid e avant tout traitement des donn es qu elle contient Que se soit pour un acc s une suppression une manipulation le cas de l exemple de Chapitre 5 Etude de cas et r sultats exp rimentaux 79 la Figure 5 7 ou encore une r allocation l utilisateur est s re d acc der galement une adresse m moire qui reste valide 5 3 3 Les d passements de tampon Les erreurs de d passement de tampon sont assez simples d tecter Dans le cas de l application Asteroids une seule erreur a t d tect e et ceci tant par AspectC Debogger que par Purify Il faut dire que ce type d erreur reste bien entretenu par les d bogueurs de m moire Si on se r f re la Section 2 2 2 1 du Chapitre 2 on constatera que pour liminer les erreurs d underflow et d overflow Purify ins re deux zones de garde qu il a nomm zones rouges Dans le cas de notre outil on ins re un seul espace m moire suppl mentaire afin de d tecter les erreurs d overflow Pour les erreurs d underflow la signature des informations collect es concernant l allocation et la checksum somme de v rification d crites dans la Section 4 3 3 1 du Chapitre 4 s occupent de les d tecter Un gain d espace m moire est suscit Nous illustrons ci dessous l erreur d tect e Tableau 5 3 R sultat de d tection des d passe
109. m moire ou non Un rapport de fin d ex cution est fourni au programmeur et comportera les d tails suivants 1 le nombre de pointeurs encore allou s 2 la taille totale de la zone m moire encore allou e dynamiquement 3 le nom du fichier et le num ro de ligne de chaque allocation La m thode responsable de ces op rations est ConteneurNew Affiche Contrairement aux autres m thodes elle ne prendra aucune adresse comme argument Elle comportera deux variables locales nbr pointeur et faille totale pour stocker r ciproquement le nombre de pointeurs et l espace m moire encore allou Vu que chaque l ment de la liste est directement li une DAC et ceci travers l attribut ptr_info voir Figure 4 7 il nous est possible de collecter lors du parcours de la liste toutes les informations n cessaires En effet une fois un pointeur atteint i on proc de la validation de son adresse encore une fois l aide de la m thode fInfoPointeur ii on somme sa taille la variable faille totale iii et on incr mente la variable nbr pointeur Bien videmment il nous est possible de fournir une quantit d informations concernant chaque pointeur atteint incluant bien sur le nom du fichier et le num ro de ligne o l allocation t effectu e voir Figure 4 5 Si le programmeur juge qu un pointeur n est plus n cessaire il suffit de faire appel la m thode FreeSecurise et il sera supprim d une mani r
110. malloc size 16 sizeof InfoPointeur Figure 4 6 Changement du comportement de l op rateur new AspectC permet d introduire une tranche de code l aide des mots cl s slice class En effet un slice est un fragment d l ment du langage C d finissant une port e Par exemple on peut prolonger la structure statique d un programme via un slice en fusionnant sa port e avec une ou plusieurs classes A la ligne 7 de la Figure 4 5 on a fusionn le nouveau comportement de l op rateur new avec toutes les classes de l application cliente et ce en utilisant classes dans le code du conseil Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 60 de m moire bas sur la programmation par aspect AspectC Debogger 4 3 2 3 Extraction de la taille de l espace m moire allou ce stade il ne manquerait plus que l extraction de la taille de l espace allou dynamiquement pour ensuite la sauvegarder dans le champ JnfoPointeur gt taille En Section 4 3 2 1 la coupe transverse NEW comprend un argument de type size_t Ceci signifie qu une valeur de type size_t est fournie chaque fois que le point de jointure d crit par la coupe transverse NEW est atteint La fonction args S utilis e dans la coupe transverse d livre tous les points de jointure du programme client o un argument de type size_t est utilis advice New S after size_t S InfoPointeur gt taille
111. ments de tampon Purify AspectC Debogger Erreurs Erreurs Temps report es report es coul DebugTest Dans la classe d3dfile une des classes responsables de la configuration 3D du jeu Asteroids un tableau m_pTextures est allou dynamiquement m_pTextures est un tableau de textures de type D3DMATERIALS qui contiennent des valeurs de param trage dimensionnel voir la ligne 1 de la figure 5 8 Une erreur de d passement de tampon est signal e au niveau de l espace m moire r serv pour le tableau m_pTextures Voir la ligne 10 de la figure 5 8 Ce d passement est d au nombre de textures qui est largement sup rieur la taille m_dwNumMaterials du tableau avec m dwNumMaterials OL N tant pas expert en la programmation 3D nous n avons pas pu cerner quoi le nombre de textures correspondait Par contre nous sommes all s voir quoi correspondaient les valeurs des textures _D3DMATERIALS du tableau m_pTextures et avons constat que nombreuses d entre elles taient erron es Chapitre 5 Etude de cas et r sultats exp rimentaux 80 str cture d une texture typedef struct _D3DMATERIAL8 D3DCOLORVALUE Diffuse Diffuse color RGBA D3DCOLORVALUE Ambient Ambient color RGB D3DCOLORVALUE Specular Specular shininess D3DCOLORVALUE Emissive Emissive color RGB float Power Sharpness if specular highlight D3DMATERIAL8 if pMtrlBuffer amp amp m_dwNumMaterials gt 0
112. met une extension et un d veloppement de ces futures recherches Notre travail de recherche est ouvert toute possibilit d am lioration Enfin pour conclure et pour divertir le lecteur nous avons ajout en annexe des benchmarks r sumant les r sultats de notre tude de cas Chapitre 5 et quelques exemples du code source d AspectC Debogger Abdullahi et Ringwood 1998 AspectJ 2001 AspectC 2006 Aspect Werkz 2005 Asteroids 2010 Baecker 1970 Bartlett 1989 Baltus 2000 Boehm 1993 Boehm 2002 Bray 1977 CiteSeer 1990 CiteSeer 2008 Collins 1960 Cousot 2000 Debbabi et Tlili 2009 Bibliographie S E Abdullahi and G A Ringwood Garbage collecting the Internet a survey of distributed garbage collection ACM Computing Surveys 30 3 330 373 September 1998 The AspectJ Organization Aspect Oriented Programming for Java http www aspectj org 2001 http Awww aspectc org BEA Systems http www aspectwerkz codehaus org Chicago Illinois USA 2005 http astereids3d sourceforge net H D Baecker Implementing the Algol 68 heap B T 10 4 405 414 1970 J F Bartlett Mostly Copying garbage collection picks up generations and C Technical note DEC Western Research Laboratory Palo Alto CA October 1989 J Baltus La programmation Orient e Aspect et AspectJ Pr sentation et Application dans un syst me Distri
113. mple dans le but d identifier les mod les de fonctions et d op rateurs d di s pour la mesure et la gestion de la m moire dynamique en C nous consid rons les fonctions d allocation et de d sallocation suivantes e void operator new size_t size Allocation d un espace m moire dont la taille est gale celle de l argument size e void operator new size_t size Allocation de tableau e void operator delete void ptr D sallocation de l espace point ptr Si ptr est NULL rien ne se passe e void operator delete void ptr D sallocation d un bloc de m moire d un tableau Afin de traiter des donn es au niveau des points de jointure AspectC fournit un m canisme de tra age au niveau du code source de l application cliente Plus exactement la Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 53 de m moire bas sur la programmation par aspect AspectC Debogger classe JoinPoint AspectC 2008 qui est une classe propre AspectC est responsable de ce m canisme Les fonctions de cette classe peuvent tre employ es pour d terminer le code ajouter ou encore d tecter pour une gestion de la m moire dynamique Ci dessous on num re les fonctions auxquelles nous avons eu recours pour l extraction des donn es concernant toute gestion de m moire dynamique 4 2 2 1 Les membres de la classe JointPoint e const char signature Retourne
114. n support m thodologique de mod lisation et de programmation pour AspectC Debogger permet de s parer toutes les m thodes dans des aspects isol s de les coder de les maintenir et de les remplacer tout fait ind pendamment des autres aspects AspectC Debogger peut tre sujet d une volution qui ne le p nalisera point Chapitre 5 Etude de cas et r sultats exp rimentaux 83 5 4 5 Stabilit d AspectC 5 4 5 1 Probl mes de compilateur Lors de la liaison du tisseur d AspectC avec le compilateur C certains probl mes ont fait surface Le premier qui est forcement d l immaturit d AspectC est l incapacit du tisseur reconna tre certains fichiers ent te 3D de DirectX header files M me avec la solution mentionn e dans le README Win32 AspectC 2008 il reste encore des fichiers qu on n a pas pu charger 5 4 5 2 Templates C non reconnus L installation d AspectC TM est venue avec un ensemble d exemples Ces derniers s av rent assez simples et sans aucune impl mentation de classes templates C Lors du tissage de notre premier aspect avec des templates C le probl me est survenu En effet certaines fonctions membres de la biblioth que iostream comme cin cout etc ne sont pas reconnues lors de l utilisation des classes templates et nous ne pouvons donc pas retourner certaines donn es ou certains r sultats directement par des flux L utilisation d une autre
115. n des erreurs dues des fuites de m moire peut parfois exiger de longues s ries de tests et un suivi de protocoles d administration de m moire dynamique le tout afin de ne pas nuire un code qui est suppos tre stable pendant quelques ann es Les cas o la pr sence de fuite de m moire est plus s rieuse incluent les cas o CiteSeer 2008 Marguerie 2009 e un programme est toujours fonctionnel et consomme de plus en plus de m moire dans le temps par exemple des t ches masqu es sur des serveurs background tasks mais sp cialement dans des syst mes embarqu s qui sont en ex cution pour plusieurs ann es e une nouvelle allocation est souvent effectu e par exemple la cr ation de fen tre d un jeu vid o ou d une animation vid o e la m moire est tr s limit e par exemple dans les syst mes embarqu s ou encore des dispositifs portatifs Sans pour autant avoir des connaissances en programmation l exemple de la Figure 2 2 crit en pseudo code montre comment une fuite de m moire pourrait survenir et les effets que cette derni re pourrait provoquer Le programme fait partie d un logiciel tr s simple con u pour commander un ascenseur Une ex cution de ce programme est atteinte toutes les fois qu une personne se trouvant l int rieure de l ascenseur appuie sur un bouton pour atteindre un tage quelconque Quand un bouton est press 1 R server une zone m moire qui servira rappe
116. n et Pohl 1991 Ellis et Stroustrup 1990 Ellis 1993 FreeBSD 2008 Freshmeat 2007 Ferreira 1991 Gati 2004 Harrison et Ossher 1993 Hagen et Zhang 2002 Hirzel et al 2002 IBM Hursley 2002 IBM Rational Purify 2008 IBM Software 2003 89 Science Concordia university 2009 Aaron Dailey Effective C memory allocation EE Times India Janvier 1999 http www deitel com ResourceCenters Programming D L Detlefs Garbage collection and runtime typing as a C library In USENIX C Conference Portland Oregon USENIX Association August 1992 David L Detlefs Concurrent garbage collection for C In Peter Lee editor Topics in Advanced Language Implementation MIT Press 1994 http www microsoft com games en US aboutGF W pages directx aspx D R Edelson and I Pohl A copying collector for C In Usenix C Conference Proceedings pages 85 102 USENIX Association 1991 M A Ellis and B Stroustrup The Annotated C Reference Manual Addison Wesley 1990 J R Ellis Put up or shut up In Moss ef al OOPSLA ECOOP 93 Workshop on Garbage Collection in Object Oriented Systems October 1993 The FreeBSD Foundation Freebsd the power to serve http Awww freebsd org www freshmeat net 2007 Paulo Ferreira Garbage collection in C In Workshop on Extensions to C Lisbon June 1991 Gati Michel Analyzing Run time Component Memor
117. n tn A RE nt naa et nt 16 222 ANT I D ro re re RO LE Eee ti nee T 17 2 2 2 1 Les erreurs d acc s de m moire Memory Access Errors 17 2 2 2 2 Les erreurs de fuite de m moire Memory Leaks Errors aseeseen 22 22543 Purify experimental nenene aires aa e ais a iai 23 PARAE POGAI 12 RAEE AE E E E E A as Ted A A ET 23 22 37 Memehet Ki eee ie nan nee era E EE ANE TEEN 27 223A Valgrind nanora E A R E E A 27 22 32 Valid value V bilsr 88 nt adidas dled hide ate 28 2 2 33 Valid adress A DUS reee a e TE AE oda E 28 2 2 3 4 Notes et limitations 28 2 3 Gestion de m moire et CA ir nent sean termine ne ovuvdeaateissiaeteraies snes tte tes 29 2 3 1 Gestion de la m moire en Crt is entendent 30 2 3 2 Probl mes actuels avec les compilateurs CP an turn OO 2A Conclusion nr E RE A E a EE A Ea 311 Chapitre 3 Pr occupations et aspects ss 33 3 1 Introduction i sais sacesteesloicevesa ce dois caaiiecs stawek caus A T amendes 33 3 2 S paration GES Pr OCCUPATION SN Gaiden eters ne Saut bd 34 3 3 Programmation par aspect PONS EUR Sense canines abla aati eae 37 DS le TIC SCTIP NOUS nestao ene aeea cers ae E E a Te cn ere 37 3 3 2 Fonctionnement et Motivations ssssssssssessseserssererssesresseesresessestesenrnvesereserses 38 3 33 Int gration des Aspects LR LA EEE AE Ee I Aa TA 40 3 3 4 Programmation par aspect avec AspectC ss 4 3 A COnCIUSION shears distant are Wee ete tease tr et At ceva ne 4
118. nt d tectables seulement par le programmeur par exemple le stockage de l ge d une personne dans une zone m moire pr vue de contenir sa date de naissance Les compilateurs et les outils d analyse de code statique Lint par exemple n ont pu cerner que les erreurs statiquement d tectables Tandis que des logiciels comme Purify et Valgrind amp Memcheck se sont sp cialis s dans la d tection des erreurs qui se produisent en cours d ex cution Dans la section suivante nous allons introduire deux outils de d bogage de m moire Nous expliquerons leurs mani res de d tecter les erreurs d acc s aux zones m moire et les erreurs de fuite de m moire et citerons enfin leurs limites 2 2 2 Purify 2 2 2 1 Les erreurs d acc s de m moire Memory Access Errors a Comment Purify trouve t il les erreurs d acc s de m moire Pour r aliser une d tection presque compl te des erreurs d acc s de m moire Purify cerne chaque acc s de m moire qu un programme effectue maintient et examine un code d tat de chaque octet de m moire Des acc s inconsistants de m moire g n reraient des messages Chapitre 2 Gestion de la m moire un tat de Part 18 d erreur imprim s sur cran CiteSeer 1990 Purify garde la trace de diff rents tats de zones m moire e celles qui ne sont pas encore allou es e celles qui sont allou es mais pas encore initialis es e celles qui sont allou es et initialis
119. nt un entier comme premier param tre et n importe quelle fonction g n rale intitul e select_ charg e de retourner un r el Avec la combinaison de fonctions de coupes transverses un programmeur peut obtenir des expressions plut t puissantes afin de d crire l emplacement o la m thode d aspect est cens e affecter le programme Par exemple nous pourrions changer l expression de la coupe transverse de l aspect tracing comme suit 2 Q advice call amp amp within Bataille before Cout lt lt calling lt lt JoinPoint signature La fonction cal1 produit l ensemble des points de jonction des appels pour des fonctions donn es Par opposition aux points de jonction d ex cution les points de jonction d appels prennent effet du c t de la routine appelante c est dire avant apr s ou en m me temps que l appel de la fonction concern e La fonction de la coupe transverse within se Chapitre 3 Pr occupations et aspects 44 contente de retourner l ensemble des points de jonction dans les classes ou les fonctions indiqu es En introduisant la m thode d appel l intersection de call soit n importe quel appel de fonction et de within Bataille n importe quel point de jonction dans la classe Bataille l aspect ne pistera d s lors que les appels de fonction lanc s partir d une m thode de la classe Bataille 3 4 Conclu
120. ntera une revue pertinente de la litt rature des diff rentes erreurs qui sont dues une mauvaise gestion de m moire les techniques utilis es pour d tecter et rem dier ces erreurs et les diff rentes techniques employ es au sein de C pour assurer la gestion de la m moire Le Chapitre 3 pr sentera la s paration des pr occupations et plus particuli rement la programmation par aspect Le Chapitre 4 pr sentera une description d taill e de notre outil AspectC Debogger Le Chapitre 5 d crit une tude de cas d AspectC Debogger avec Purify Enfin la pr sente recherche se termine par une conclusion et quelques aspects de recherches futures seront propos s Chapitre 2 Gestion de la m moire un tat de l art 2 1 Gestion du cycle de vie des objets 2 1 1 Introduction L ex cution d algorithmes d une application informatique consomme essentiellement deux ressources le temps et l espace m moire En machine l espace en question o toute cr ation et gestion d objets de variables et de structures de donn es est effectu e peut tre la m moire vive ou la m moire de masse persistante Les composantes d une application objets variables structures de donn es pourront tre modifi es lors de son d roulement et elles seront d truites une fois cette m me application achev e Ces tapes de cr ation de l utilisation et de destruction d objets forment le cycle de vie d un objet Bray 1977
121. oire ralentissement de l application cliente et diminution de ses performances facilit et transparence d utilisation g n ricit de l outil stabilit d AspectC dans le cas de l outil AspectC Debogger Dans ce chapitre nous argumenterons dans une premi re section notre choix de l application cliente autour de laquelle se d roulera cette tude de cas Apr s nous fournirons un manuel d utilisation d AspectC Debogger celui de Purify a t pr sent dans le chapitre 2 Ensuite nous d taillerons les r sultats de l tude de cas et cl turons le chapitre avec une conclusion Chapitre 5 Etude de cas et r sultats exp rimentaux 70 5 1 Application analyser et motivations Dans cette section nous argumentons notre choix de l application analys e durant l tude de cas Ensuite nous d taillerons la mani re avec laquelle elle sera ex cut e sous l outil AspectC Debogger Notons que le manuel d utilisation de ce dernier sera disponible la fin de cette section 5 1 1 Choix de l application et Motivations Le choix de l application cliente est important il nous permettra d largir nos chances afin d effectuer une tude de cas robuste et qui aboutira une valuation juste de notre outil L application devra ob ir certaines normes que nous avons mises en place En effet i il est indispensable que l application cliente soit crite avec le langage C ii
122. ollector GC une diminution au niveau des erreurs de gestion de m moire a t atteinte Vassev et Paquet 2006 Et enfin un outil d analyse est apparu et connu sous le so de d bogueur de m moire Memory Debugger En effet m me si certains programmes se voient crits avec des langages munis d un ramasse miette l utilisation d un d bogueur de m moire s est vue fortement conseill e afin de rem dier efficacement aux erreurs d j cit es ci dessus Detlefs 1994 Boehm 2002 Tlili 2009 Une explication d taill e concernant le degr de gravit de ces erreurs et leurs mani res d affecter le programme durant son ex cution sera pr sent e dans le Chapitre 2 Le d veloppement d outils de d bogage de m moire est vite rendu une obsession Purify IBM Rational Purify 2008 est un exemple parmi tant d autres C est un programme utilis par les d veloppeurs de logiciels afin de d tecter les erreurs d acc s de m moire en particulier celles crites en C C Purify permet une analyse dynamique des applications Lorsqu un programme est reli ce dernier un code de v rification est automatiquement ins r l ex cutable en analysant et en s ajoutant au code objet CiteSeer 2008 Si une erreur de m moire se produit le programme imprimera sur l cran de sortie l emplacement exact de l erreur l adresse de m moire en question et d autres informations importantes Aussi on peut prendre
123. on essayer de venir bout des bogues Ellis 1993 a tabli que dans le cas des langages gestion explicite seulement de la m moire comme C les programmeurs passent plus des deux cinqui me du temps accord l laboration du logiciel d boguer les erreurs li es la gestion de la m moire Certaines recherches effectu es au sein de boites renomm es de d veloppement logiciel IBM Rational Purify 2008 ont permis l int gration des outils de d bogage de m moire au sein de C Ils ont utilis des approches telles que le Mark and Sweep Sioud 2006 les Red Zone CiteSeer 2008 ou encore les compteurs de r f rence Ellis 1993 Malheureusement ces outils de d bogages de m moires connaissent certaines limites que des recherches essaient encore de surpasser par exemple l inhabilit d tecter les erreurs d acc s travers des pointeurs IBM Rational Purify 2008 Toute tentative d int gration d un d bogueur de m moire au sein du langage C rencontre certains probl mes et contraintes le cas de Purify et Valgrind r unies peut tre r sum comme suit e suite la bonne flexibilit de manipulation des pointeurs qu offre les langages C et C il est parfois impossible de d tecter les erreurs d acc s travers des pointeurs par exemple acc s l gal une zone de m moire inappropri e p nalit de performance et ralentissement de 20 30 fois de l ex cution d un programme lors
124. oppeur et lui permettrait des manipulations s curis es des zones m moire Pour r soudre ce conflit et permettre au C d offrir une gestion implicite de sa m moire chercheurs et praticiens ont opt pour l impl mentation d un d bogueur de m moire Certain ont pu donner des r sultats convaincants au niveau de la d tection des erreurs d acc s et de fuites de m moire Valgrind Manual 2008 Purify User s Guide 1999 mais aucun n offre ce qu on appelle une gestion de m moire s curis e et ceci que se soit au niveau de l allocation ou de la d sallocation des espaces m moire L objectif primaire de cette recherche est de proposer un outil bas sur la programmation par aspect afin d assurer pour les applications impl ment es en langage C une gestion dynamique implicite et s curis e de leurs espaces m moire Assurer une continuit implicite d une gestion de m moire explicite offerte par le langage C est aussi notre priorit Dans le cas du langage C l op rateur new est responsable des allocations dynamiques de la m moire Avec new on cr e un objet et l espace m moire est implicitement demand Une fois l objet cr new renvoie un pointeur du type de l objet et c est travers ce m me pointeur que l objet sera manipul Dans le langage C la notion de m moire dynamique est tr s troitement li e celle de pointeur En effet une bonne manipulation des pointeurs induit une g
125. oupes transverses de malloc et realloc call void malloc size t call void realloc size t void Le r sultat de la combinaison est une nouvelle coupe transverse qui trouvera aussi bien l appel de malloc que celui de realloc 4 2 1 4 Les coupes transverses nomm es Named Pointcut Une coupe transverse nomm e peut tre d clar e afin de faciliter la composition des coupes transverses Dans la POA ce type de coupe transverse joue un r le important au niveau de la r utilisabilit Ainsi la coupe transverse caract risant malloc et realloc peut tre nomm e memory_allocation et crite comme suit Pointcut memory_allocation call void malloc size _t call void realloc size_t void Maintenant l impl mentation de memory_allocation peut tre utilis e chaque fois qu un appel de fonction de malloc ou de realloc devrait tre d pist 4 2 1 5 Les expressions de correspondance Match expressions Les expressions de correspondance sont utilis es pour ex cuter des filtres sp cifiques sur les points de jointure Une expression de correspondance est tr s similaire 4 une m thode de signature de C Le symbole est utilis comme un joker pour augmenter la flexibilit des filtres sur les points de jointure Par exemple les points de jointure suivants ont diff rentes significations Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 51 d
126. ous Microsoft Visual Studio 2005 une d signation des r f rences des fichiers d ent te et des biblioth ques que DirectX 9 1 fournit est n cessaire e D signation du r pertoire qui contient les fichiers d ent te h DirectX 9 1 dans la rubrique MicrosofiVisualStudio2005 Tools VC Directories Include Files e D signation du r pertoire qui contient les biblioth ques lib DirectX 9 1 dans la rubrique Microsoft VisualStudio2005 Tools Options VC Directories Library File 5 2 3 AspectC Debogger et son manuel d utilisation Enfin pour instrumenter le code source d Asteroids sous Microsoft Visual Studio 2005 et avec les aspects d velopp s AspectC Debogger l aide d AspectC Add In il faudra proc der comme suit voir Figure 5 2 et Figure 5 3 e lancer le projet de travail Asteroids sous Microsoft Visual Studio 2005 e configurer AspectC Add In sous le projet Asteroids Deux r pertoires s ajouteront la solution du projet Aspects actifs et Aspects inactifs Chapitre 5 Etude de cas et r sultats exp rimentaux 73 ajouter les aspects d crits dans le Chapitre 4 au r pertoire aspects actifs PurlfyPlus 2 A Build Debug Tools Window Community Help a Jy Debug Win32 Explorer Aste kI D3D Header Files in d3dapp h in dadfile h in d3dres h h dadutilh ap dsutil h in dxutil h D30 Source Files d3dapp cpp d3dfile cpp c d3dutil cpp 4 dsutil cpp dxut
127. ous montre plus de d tails sur les instructions d allocation typedef struct size_t taille attribut taille InfoMPointeur void Malloc size t size void ptr allocation des espaces m moire suppl mentaires ptr malloc size sizeof InfoPointer 16 return ptr Figure 2 8 Structure InfoPointeur et allocation de donn es avec deux espaces suppl mentaires Une fois l allocation effectu e nous allons afficher l attribut taille de la structure InfoPointeur On devra pointer sur l espace m moire r serv nfoPonteur le deuxi me espace m moire pour ensuite acc der l attribut faille Dans la ligne 6 de la Figure 2 9 une erreur de frape s est produite une sommation de 2 a t effectu e au lieu de 1 et le pointeur Info se trouve point sur le tampon overflow au lieu de la structure JnfoPointer La Figure 2 7 montre plus de d tails sur le principe de sommation et de pointage pour chacun des 3 espaces m moire void AfficherTailleAllocation InfoPonter Info void ptr Malloc Pointer Info sur la zone m moire lire Info char ptr 2 Erreur sommation de 2 au lieu de 1 et Info pointe sur le tampon anti overflow au lieu de InfoPointeur printf Size data is lu Info gt taille Impossible d acc der la zone Info gt taille Figure 2 9 Acc s l gal une zone m moire inappropri e Chapitre 2 Gestion de la m moire un tat d
128. parant AspectC Debogger avec l outil Purify d crit dans le Chapitre 2 sera labor e pour cette fin Chapitre 5 Etude de cas et r sultats exp rimentaux Dans ce chapitre nous allons travers une tude de cas comparer deux outils de d bogage de m moire pour le langage C Le premier outil AspectC Debogger est celui propos au Chapitre 4 Le deuxi me outil Purify IBM a t choisi vu que nous l avons approch exp rimentalement au Chapitre 2 et que c est aussi une r f rence dans le domaine La plate forme mat rielle utilis e pour les exp riences est un DellD810 avec Pentium M 1 86 GHz CPU et 2 Go de m moire Cette tude vise trois objectifs Mesurer la capacit d AspectC Debogger d tecter les erreurs dues une mauvaise gestion de la m moire en C D montrer qu AspectC Debogger peut tre utilis efficacement pour mettre jour les vuln rabilit s ind sirables de gestion de m moire au niveau du code source Exploiter cette exp rience afin d am liorer l impl mentation des tisseurs d AspectC TM Pour effectuer cette comparaison nous partons de l analyse d une m me application cliente travers chacun des deux outils Cette comparaison se portera sur les crit res suivants l Dw RF won habilit de d tection et de traitement des diff rents types d erreurs de gestion de m moire C coexistence d une gestion implicite et explicite de la m m
129. pement d un outil de gestion implicite et de d bogage 58 de m moire bas sur la programmation par aspect AspectC Debogger cette liste doublement chain e qu on nommera conteneur nous sera utile tout le long de notre travail La structure de la liste sera comme suit Informations concernant toute allocation dynamique typedef struct unsigned long nbr_signature signature bool est_alloue Pointeur allou ou lib r size_t taille Taille allou e sans informations de d bogage const char nomfich Nom du fichier source ulong numligne Gigne du fichier struct Ptrchaine ptr_liste Pointeur dans la liste unsigned long somme_inf Somme des informations checksum InfoPointeur Un pointeur chain struct PtrChaine struct PtrChaine precedent El ment suivant struct PtrChaine suivant El ment suivant ulong nbr_signature signature InfoPointeur ptr_info Pointeur a lib rer Figure 4 5 Structure du conteneur et les informations ajout es pour chaque pointeur 4 3 2 1 D tection des appels de l op rateur new Afin de lister tous les pointeurs avec leurs informations correspondantes notre aspect se doit de d tecter toute allocation dynamique c d tout appel de l op rateur new On utilisera pour cette fin la coupe transverse suivante pointcut New size_t S operator new S operator new within conteneur amp amp arg
130. pilateur r gulier de C Une fois le tissage d aspect effectu weaving il produit en sortie du code standard C Gati 2004 Afin de comprendre clairement les concepts fondamentaux du langage AspectC on fournit un simple exemple qu illustre la Figure 4 1 Dans cet exemple on traite les allocations de m moire utilisant la fonction malloc plus exactement on essaye d impl menter un aspect afin d obtenir de l information sur le nombre d occurrences des allocations de malloc Dans le programme de la Figure 4 1 on alloue via malloc un objet de type la structure myCalc ensuite on fait appel la fonction doSomething et enfin l objet en question est lib r Ce processus est effectu deux fois struct myCalc public float a b float result char opera void doSomething printf Hello there n int main l myCalc ab myCalc malloc sizeof myCalc allocate malloc 1 doSomething appel de la fonction doSomething free ab myCalc bb myCalc malloc sizeof myCalc allocate malloc 2 doSomething encore un appel de la fonction free bb doSomething Figure 4 1 Exemple avant tissage de l aspect Nous voudrions que le code d aspect d piste chaque allocation que malloc effectue et incr mente la fois un compteur afin d obtenir le nombre de fois o on a fait appel malloc Avant que nous puissions crire le code aspect la compr
131. r sentera AspectC dans le cadre pratique de notre travail de recherche include lt cstdio gt Exemple de d pistage du flux de contr les aspect Tracing dite le nom de la fonction avant le d but de son ex cution advice execution before std printf in s n JoinPoint signature Figure 3 3 Aspect Tracing s ex cutant avant le d marrage de l ex cution de n importe quelles fonctions du programme principale M me en n ayant pas une grande ma trise des l ments syntaxiques expos s ci dessus POA offre d normes avantages sens s tre vidents apr s une lecture diagonale de l exemple Sans le recours ce simple aspect qui ne prend que quelques lignes de code le d veloppeur serait oblig d tendre l ensemble des fonctions du programme au moyen d une d claration suppl mentaire printf afin d obtenir le m me r sultat Dans un projet important un guide de style devrait indiquer cette technique sous forme d exigences et l ensemble des programmeurs devrait lire et observer cette r gle g n rale Ainsi la solution propos e par POA permet de gagner un temps pr cieux des efforts d organisation et garantit l absence d oubli de fonction De la m me fa on le code affect par l aspect est enti rement d coupl Chapitre 3 Pr occupations et aspects 42 du code de d pistage soit la d claration printf Il n est m me pas n cessaire
132. rammeurs d encapsuler des comportements qui affectaient de multiples classes dans des modules r utilisables En d autres termes l POA permet d encapsuler dans un module les pr occupations qui se recoupent avec d autres N anmoins il est important de souligner que la programmation par aspect utilise la technologie objet dans un cadre qui en conserve les b n fices tout en palliant ses limitations Pour mieux comprendre ce principe nous pouvons reprendre la description originale faite par George Kiczales et ses coll gues Kicsales et al 1997 Une pr occupation qui doit tre impl ment e est soit e Une composante fonctionnelle si la pr occupation peut clairement tre encapsul e dans une proc dure g n ralis e telle qu un objet une m thode une proc dure ou une fonction Par d finition les composantes sont donc des unit s fonctionnelles d un syst me Ex les services imprimantes acc s aux bases de donn es etc e Un aspect si la pr occupation ne peut pas tre clairement encapsul e dans une composante Les aspects correspondent souvent aux exigences non fonctionnelles d un syst me traversant plusieurs de ses composantes fonctionnelles et facilitant la gestion de leurs propri t s Ex l exception la s curit la synchronisation la performance etc Chapitre 3 Pr occupations et aspects 38 En utilisant ces termes on entrevoit le but de POA qui se r sume aider le programmeur a
133. rce de vuln rabilit et d erreurs critiques telles que les erreurs de gestion de m moire les erreurs de format de cha ne et les mauvaises conversions des types D ailleurs les librairies C C sont fournies aux programmeurs avec des fonctions pour la gestion des privil ges la gestion des fichiers la gestion du r seau etc Ces fonctions sont con ues avec soin pour fournir la flexibilit et les caract ristiques de performance mais n gligent les probl mes de s curit Debbabi et Tlili 2009 Notons que la s curit est celle de la gestion de m moire et celle des types tels que les d bordements de m moire tampon les erreurs de format de cha ne et les mauvaises conversions de type Malgr la disponibilit de nombreux livres et documents sur lesquels un programmeur peut s appuyer pour d velopper un code s curitaire des erreurs de mise en uvre ayant des cons quences graves pour la s curit existent toujours dans le code source Debbabi et Tlili 2009 Les fonctions des biblioth ques C C peuvent tre consid r es non s curis es et par cons quent doivent tre utilis es avec pr caution Plus le nombre de lignes augmente plus un contr le manuel des violations de la s curit devient difficile M me les programmeurs les plus qualifi s ont tendance commettre des erreurs involontaires qui rendent le code vuln rable et potentiellement exploitable d un point de vue s curit Par cons quent les Chapitr
134. re printf detection de la fonction principale main CalculTempsExection Start On soulignera l utilisation du mot cl before qui est responsable de l ex cution des portions du code du conseil avant l ex cution de la proc dure main L appel de la m thode CalculTempsExection Start d clenche le comptage du temps d ex cution Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 57 de m moire bas sur la programmation par aspect AspectC Debogger En fin on utilisera un deuxi me conseil afin de d tecter la fin de l ex cution de la proc dure main on utilisera pour cette fin le mot cl afier advice chrono after CalculTempsExection Stop printf Temps consomm dms n CalculTempsExection m La m thode CalculTempsExection Stop arr tera le chronom trage et un affichage du temps d ex cution de l application cliente est atteint avec la m thode printf 4 3 2 Aspect valuant la m moire utilis e lors de l ex cution d une application Une des premi res fonctionnalit s qu un d bogueur de m moire devrait assurer est l valuation de la m moire que I application cliente a utilis tout au long de son ex cution En effet ce type d information peut toujours tre utile en permettant au programmeur de connaitre les besoins de son application en espace m moire Dans le cas du langage C la notion de m moire dynamique es
135. re 4 D veloppement d un outil de gestion implicite et de d bogage 54 de m moire bas sur la programmation par aspect AspectC Debogger e around size_t size Dans le corps du conseil around la fonction tjp gt proceed permet l ex cution du point de jointure L ex cution du point de jointure new est importante dans ce cas car nous aurons besoin de sa valeur de retour qui est bien videment un pointeur portant l adresse de la m moire allou e tjp gt result Q Pour v rifier si la m moire allou e par l op rateur new est bel et bien lib r e ou non nous ajoutons le code ci dessous lors de l ex cution de la fonction delete On v rifie si le pointeur sur cette m moire est NULL ou non advice call void delete amp amp args ptr before void ptr printf Pointer deallocated p n ptr e args ptr Choisit tous les appels du point de jointure delete avec un argument ptr before void ptr La fonction before force le code du conseil s ex cuter avant le point de jointure et prendre en consid ration ce dernier seulement lorsque le type void est inclus e printf Pointer d sallou p n ptr Imprime le pointeur de l adresse d sallou et affiche NULL si rien ne se passe 4 2 2 3 Collection des noms de classes Nous voulons permettre notre outil de d bogage de m moire de retracer les informations concernant le type de chaque objet allou
136. rt Il est possible de d tecter l avance le moment o un objet ne sera plus utilis il est possible de le d couvrir lors de l ex cution un objet sur lequel un programme ne maintient plus de r f rence objet devenu inaccessible ne sera plus utilis Sioud 2006 Ainsi un Garbage Collector construit le graphe d objets atteignables qui est form de tous les objets accessibles a partir de toute racine Ces derniers ne seront plus utilisables et devraient rester en m moire vu que leurs valeurs sont accessibles depuis les racines Tous les objets qui ne seront pas accessibles par le programme seront alors collect s par le Garbage Collector puisqu ils sont consid r s comme des miettes Dans l exemple pr sent la Figure 2 1 E et F ne sont pas accessibles ni directement ni par l interm diaire d autres objets et ils sont consid r s comme des miettes Variables Registre Racine M moire Figure 2 1 Disposition de la m moire Toutes les techniques de Garbage Collection supposent que les miettes doivent rester stables en m moire et qu elles ne peuvent en aucun cas redevenir vivantes Un langage muni d un Garbage Collector permet d crire des applications informatiques plus simples et plus s res Le fait que la m moire soit g r e automatiquement par
137. s S 1 Cette coupe transverse cible la totalit des classes et d tectera touts les op rateurs Li new quelque soit le nombre et le type d arguments qu ils prendront new newf Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 59 de m moire bas sur la programmation par aspect AspectC Debogger 4 3 2 2 Changement du comportement de l op rateur new en allouant deux espaces m moire suppl mentaires Une fois une allocation dynamique est atteinte notre aspect alloue deux espaces m moire suppl mentaires i Un premier d une taille gale 16 octets dont l utilit sera expliqu e plus loin dans ce chapitre ii et un deuxi me de la taille d une structure de donn e nfoPointeur afin de contenir les informations correspondantes l allocation d tect e voir Figure 4 5 ce niveau AspectC TM intervient encore une fois et nous permet de changer le comportement de l op rateur new qui t sens r server de l espace m moire pour stocker les donn es propres l application seulement en lui permettant d allouer des espaces m moire suppl mentaires aspect MonAspect public size_t m moire util O public securise la gestion de m moire afin de s assurer qu aucune autre gestion n est en place eviter les conflits advice classes slice class NEW public void operator new size_t size return
138. s parer clairement les aspects et les composantes les uns des autres via des m canismes qui permettent de les abstraire et de les composer pour obtenir un syst me final On sent tout de suite la diff rence avec les langages orient s objet qui ne permettent que de s parer les composantes rendant impossible labstraction claire des aspects Avec l POA chaque probl matique est impl ment e de fa on compl tement ind pendante et sans pour autant se soucier de l existence des autres contraintes 3 3 2 Fonctionnement et Motivations Apr s avoir d crit la programmation orient e aspect et ses buts nous allons nous int resser ce que cette nouvelle approche implique dans le processus de d veloppement d un logiciel Comme le montre la Figure 3 2 l impl mentation d une application orient e aspect peut se d rouler en 3 tapes 1 La d composition des l ments du syst me Il s agit d identifier tous les composantes et aspects On s pare toutes les pr occupations qu elles soient fonctionnelles ou non p 2 L impl mentation de chaque pr occupation Chaque probl matique sera cod e s par ment dans une composante ou un aspect Dans un aspect le programmeur d finit aussi les r gles d int gration de l aspect avec les composantes concern es 3 L int gration du syst me Tout langage orient aspect offre un m canisme d int gration appel le compilateur d aspect ou weaver Le compilateur
139. s allons nous int resser tout au long de ce m moire Dans le langage C certains de ces aspects se trouvent tre g r s par plusieurs classes peu r utilisables et ainsi coupl es avec l application d autres sont quasi absents La programmation par aspect Kicsales et al 1997 incarnant la s paration des pr occupations Tarr et al 1999 et formant un support m thodologique de mod lisation et de programmation sera utilis e afin de nous permettre d abstraire et de composer ces aspects la POA comme tant un support d instrumentation et d analyse dynamique Pour une solution flexible g n rique de gestion de m moire et de d tection d erreurs C et une int gration fiable des aspects de s curit et d optimisation de performances nous proposons un outil complet de d bogage de m moire pour le C bas sur la programmation par aspect L valuation de cet outil se portera sur chacun des points suivants e habilit de d tection et de traitement des erreurs de gestion de m moire C e coexistence d une gestion implicite et explicite de la m moire e ralentissement de l application cliente et diminution de ses performances e facilit et transparence d utilisation e g n ricit de l outil stabilit de l approche utilis e POA AspectC pour l impl mentation de l outil 1 3 Contribution Dans le cadre de ce travail nous avons d velopp une m thode et un outil qu
140. serons l outil AspectC AspectC 2006 qui est un tisseur d aspect adapt pour le langage C Actuellement il existe un autre tisseur adapt C Taco Vaysse 2005 mais contrairement AspectC TM qui permet de modifier les m thodes ou les membres d une classe donn e Taco permet de modifier les structures de contr le du langage cible Vaysse 2005 En plus de cela AspectC ayant subit plus de tests il serait plus stable que le tisseur Taco Vaysse 2005 Apr s avoir pr sent la notion de gestion et de d bogage de m moire dans le chapitre pr c dent introduit la s paration des pr occupations et la programmation par aspect en ce Chapitre 3 Pr occupations et aspects 45 chapitre nous tablissons dans la prochaine section l objectif de la recherche ainsi que les diff rentes tapes de la m thodologie propos e afin de d velopper notre outil de d bogage de m moire 3 5 Objectifs de la recherche La gestion de la m moire est un l ment indispensable dans le cycle de vie du d veloppement d un logiciel Comme nous l avons d j vu dans le deuxi me chapitre un d laissement de la gestion de m moire nuirait aux d veloppeurs et l application m me Comme solution efficace les chercheurs ont opt pour une gestion implicite de la m moire mais dans notre cas qui est l utilisation du langage C ce dernier n offre pas de gestion implicite qui all gerait le travail du d vel
141. ses 69 215257 LE Jeu ASTSRO1dS en AR ne monta nest in sde ent 69 5 2 AspectC Debogger et l int gration de ses principaux composants sesser 71 5 2 1 Visual Studio 2005 et AspectC Add In sense 70 5 2 2 Integration du jeu Asteroids sous Visual Studio 2005 ceeeesseeeteeeeeeneeenes 71 5 2 3 AspectC Debogger et manuel d utilisation cescceseeceensecesseceesenseeecenaes 71 5 3 Exp rience Cl T s ltatS een na nt nu nt tite ne een 74 5 3 L Les NU Ges d M MOIRE RD AN a 74 5 3 2 Les erreurs d ACCS ER LE TE ER OR 76 5 3 3 Les d passements de TAMPON RS Mer nn sah tate eee 77 SA DISCUSSION benne handle En nn 81 5 4 1 Habilit de d tection et de traitement des diff rents types d erreurs de gestion Ge MEMO MS Eee te A alan aca rade 80 5 4 2 Coexistance d une gestion implicite et explicite de la m moire 80 5 4 3 Rlentissement de l application cliente et diminution de ses performances 81 5 44 G n ricit de Voutilainen is e Ginivilend wigan EE a a 81 5 4 5 Stabilit d ASD GT En de mnt ne rte ani ee 81 5 4 5 1 Probl mes de COMPAQ need die r a et end ntetl 82 5 4 5 2 Templates C non reconnus us 82 3 5 COMCIUSION See nn a cases castigo en A RS aera ge i de NS 82 Chapitre 6 Conclusion tnt niaire aei riiin ttes 87 TBD IO SPAR ie sand no ani evans ona yn wesw nine sie into 87 ANNEXE eve ss mme ardoise EE ew ane anne EE R E A ne same aa tend ee otre 92 vi Liste de Figures Fi
142. sion Le but avou de la s paration des pr occupations est de s parer toutes les m thodes dans des aspects isol s de les coder de les maintenir ou les remplacer tout fait ind pendamment des autres aspects La s paration a lieu diff renciant les aspects fonctionnels et non fonctionnels Les aspects non fonctionnels comme le tracing ne pouvant pas tre labor s par des techniques de d veloppement traditionnelles sont impl ment s par des nouvelles approches regroup es sous ce qu on appelle d veloppement de logiciel par aspect ou encore Aspect Oriented Development AOSD Parmi ces approches nous pouvons citer la programmation orient e sujet SOP la programmation orient e vue VOP ou encore la programmation orient e aspect POA En ce qui concerne notre travail de recherche nous nous baserons sur la programmation par aspect qui est un paradigme qui ne consiste pas d crire le fonctionnement du programme ou bien encore d crire sa structure comme dans la programmation orient e objet Il consiste plut t exposer des modifications lui apporter Pour mettre au point ces modifications l utilisation d un fisseur d aspect est n cessaire aspect weaver Ce dernier prend en entr e le code source du programme principal et les fonctionnalit s non fonctionnelles cod es bien videment en langages aspect pour donner comme sortie un seul code compos du code principal et des aspects Dans notre travail nous utili
143. sion de l ANSI C il offre donc une gestion de m moire explicite avec les delete new free et malloc 2 3 1 Gestion de la m moire en C Lors de la d claration d un objet il est possible de d finir les m thodes constructeur et destructeur Le constructeur est appel lors de l instanciation de l objet et ce en lui allouant un espace m moire et en initialisant les membres de cet objet Il peut cependant avoir d autres fonctionnalit s acqu rir des ressources comme des routines du syst me ou ouvrir des fichiers ou des bases de donn es Aussi un destructeur est appel la fin du programme ou encore lorsque la fonction delete est appel e Le destructeur est utilis pour l action de finalisation lorsqu elle est n cessaire mais aussi pour d sallouer l espace m moire consomm par l objet Typiquement l action de finalisation consiste lib rer les routines ou fermer un fichier Comme son pr d cesseur pour la gestion du cycle de vie de ses variables le langage C a utilis les fonctions new malloc et delete free Ces deux fonctions ont aussi int gr respectivement les constructeurs et les destructeurs des objets pour pouvoir leurs allouer et leurs lib rer respectivement de l espace m moire Ainsi la cr ation d un objet passe automatiquement par l allocation d un espace m moire qui lui sera requis Le cycle de vie d un objet se termine par la destruction de cet objet et ce en l
144. st pas rare de voir des m thodes traitant d une exigence non fonctionnelle se disperser dans l impl mentation des diff rentes classes composant le c ur fonctionnel du syst me Par exemple dans un syst me de gestion de base de donn es il se peut que la performance la journalisation et la synchronisation concernent toutes les classes acc dant la base de donn es On voit donc que ces aspects seront impl ment s dans plusieurs modules sans tre bien circonscrits II s agit tr s souvent de portions de code tr s similaires ajouter un peu partout dans les modules concern s Ce genre d obstacle entraine des cons quences n gatives sur le d veloppement de logiciels Gati 2004 A Tra age difficile les diff rentes pr occupations d un logiciel deviennent difficilement identifiables dans l impl mentation I en r sulte une correspondance assez obscure entre les exigences et leurs impl mentations Chapitre 3 Pr occupations et aspects 36 B Diminution de la productivit la prise en consid ration de plusieurs exigences au sein d un m me module emp che le programmeur de se focaliser uniquement sur son but premier Le danger d accorder trop ou pas assez d importance aux aspects accessoires d un module en d coule directement C Diminution de la r utilisation du code dans les conditions actuelles un module impl mente de multiples exigences D autres syst mes n cessitant des fonctionnalit s simi
145. t re noter Tableau 5 4 Tableau r capitulatif de l tude de cas de Purify et d AspectC Debogger Purify AspectC Debogger Bon Assez bon Minimal Mauvais Absent So Sans objet le crit re n est pas tenu en compt Conclusion Le langage C est un langage performant flexible et d une forte portabilit Il permet la programmation sous de multiples paradigmes comme la programmation proc durale la programmation orient e objet et la programmation g n rique Ses caract ristiques en font un langage id al pour des projets de taille importante Vu sa facilit d utilisation et son efficacit le langage C est actuellement le 3 me langage le plus utilis au monde Tiobe Software 2009 Freshmeat 2007 Toutefois les dispositifs de s curit sont soit absents soit mal support s par la programmation C malheureusement la flexibilit et le contr le explicite des donn es que C offre au programmeur repr sentent une importante source de vuln rabilit et d erreurs critiques N tant pas appuy e par une gestion implicite la gestion de la m moire en C s est vue toujours comme un exercice difficile voire parfois p rilleux Cette contrainte pose un d fi consid rable Le probl me d offrir une gestion automatique ou implicite au langage C a connu diff rentes tentatives de r solution Dans un premier temps les chercheurs ont opt pour impl mentation d
146. t par cons quent utilis e Celle ci a pour objectif de produire l ensemble des points de jonction d ex cution des fonctions donn es en argument Mais dans le cas o on met l accent sur les points de jonction dynamiques AspectC dispose de trois types de m thodes d aspect before after et around Ces m thodes impl mentent une partie suppl mentaire au comportement du programme Dans notre exemple ce comportement dynamique est invoqu au moyen de la d claration printf la suite de before D un point de vue syntaxique cette technique est identique au corps d une fonction et de ce fait il est d ores et d j possible de consid rer advice body ou corps de la m thode d aspect comme une fonction membre anonyme de l aspect la place du before nous aurions pu faire appel la m thode after ou encore les deux en m me temps Ainsi le corps de la m thode d aspect s ex cuterait tout juste apr s l ach vement de l ex cution d une quelconque fonction Un corps de m thode d aspect around est ex cut la place du flux de contr le cens suivre normalement le point de jonction dynamique Aussi il est possible de combiner les coupes transverses au moyen des op rateurs amp amp intersection union et inversion Par exemple l expression affiche int float Select _ invoque n importe quelle fonction g n rale appel e Affiche prena
147. t tr s troitement li e celle de pointeur Plus pr cis ment c est travers l op rateur new qu on alloue de l espace m moire dynamiquement L op rateur new cr e un objet et l espace m moire est implicitement demand Une fois l objet cr l instruction new renvoie un pointeur du type de l objet pointant bien videmment sur ce dernier Le fait de contr ler les pointeurs d une application durant son ex cution nous donne la possibilit d valuer l espace m moire utilis s et aussi d assurer une bonne gestion de la m moire dynamique Dans ce cas de figure la taille de chaque adresse m moire point e sera comptabilis e et ainsi fournir la taille de la m moire consomm e durant tout le cycle de vie de l application Plus loin dans ce travail il sera question de l impl mentation d un aspect capable de fournir i la taille de la m moire utilis e en un instant pr cis du cycle de vie de l application ii et la taille de la m moire non lib r e une fois le cycle de vie de l application termin Comme approche on a choisi de lister tous les pointeurs dans une liste doublement chain e chaque l ment de la liste correspondra donc une allocation dynamique bien pr cise et donnera acc s un nombre d informations son sujet partir de ces informations une s rie de tests pourra tre tablie afin de garantir une bonne gestion de la m moire On notera que Chapitre 4 D velop
148. tr le se produit au besoin plus pr cis ment dans l un de ces trois endroits i quand une valeur est utilis e pour g n rer une adresse m moire ii quand la d cision du flux de contr le doit tre pr cise et iii quand un appel syst me est d tect 2 2 3 3 Valid address A bits Comme d crit ci dessus chaque bit dans la m moire ou dans le CPU d tient un V bit propre lui De plus chaque bit dans la m moire et non pas dans le CPU est associ une adresse valide A bit Cette derni re indique si le programme est dans la possibilit ou pas d effectuer une lecture ou une criture l gitime sur cette zone La tache du A bit se limite au droit d acc s et ne donne aucune indication sur la validit des donn es dans cette zone ceci est bien entendu la tache du V bit Ainsi chaque fois qu un programme client effectue une op ration de lecture ou d criture sur une zone m moire Memcheck v rifie les A bit associ s a l adresse m moire en question Si l un de ces A bit indique une adresse invalide ou inadmissible une erreur est automatiquement mise 28 Chapitre 2 Gestion de la m moire un tat de l art 2 2 3 4 Notes et limitations En plus de la p nalit de performance Memcheck se trouve incapable de d tecter les erreurs de limite de donn es allou es d une mani re statique La Figure 2 13 pr sente un code qui passerait sous l analyse Memcheck de Valgrind sans aucun incident
149. travers une gestion implicite explicite ou encore les deux de la m moire e D tecter et traiter les erreurs de gestion de m moire qu un programme C peut contenir Il s agit de permettre au programmeur de reconnaitre la nature de ces erreurs et leurs emplacements pour qu il puisse proc der d ventuelles corrections 1 2 Principe de solution Essentiellement les programmes ont besoin de partager des ressources m moire imprimante etc de traiter des erreurs d optimiser les performances etc Ces besoins peuvent tre classifi s en deux parties composantes fonctionnelles et l aspect technique La composition entre ces deux derniers dans un m me programme cr e des syst mes difficiles d velopper comprendre et maintenir Kicsales et al 1997 Robillard et Murphy 01 Par cons quent il faut distinguer entre une composante fonctionnelle et un aspect technique Une composante fonctionnelle est une propri t qui peut tre encapsul e dans une proc dure g n ralis e telle qu un objet une m thode une proc dure ou une fonction Cependant un aspect technique est un module facilitant la gestion des propri t s d objets Il transverse plusieurs composantes fonctionnelles d un syst me En effet i la gestion de la m moire ii le traitement des erreurs de m moire iii la s curit et enfin iv l optimisation des performances Chapitre 1 Introduction 6 sont des aspects auxquels nou
150. trup 2004 Apr s des ann es de travail un comit r unissant l ANSI et PISO standardisa C en 1998 ISO CEI 14882 1998 Quelques ann es apr s la sortie officielle du standard le comit traita le rapport de probl mes et publia une version corrig e du standard C en 2003 Kernighan et Ritchie 1988 Le langage C est un langage de programmation permettant la 29 Chapitre 2 Gestion de la m moire un tat de Part programmation sous de multiples paradigmes comme par exemple la programmation proc durale la programmation orient e objet et la programmation g n rique La structure d un programme crit en C est videmment similaire la structure d un programme crit en C On y retrouve la fonction principale main des fichiers d en t te et des fichiers sources et une syntaxe tr s proche du C La biblioth que standard du C est en grande partie un sur ensemble des fonctions disponibles dans la biblioth que standard du C Elle englobe la Standard Template Library STL qui met la disposition du programmeur des outils puissants comme les collections conteneurs et les litt rateurs Il est connu que le langage C tient sa puissance du fait qu il est la descendance directe du langage C D autres affirment que cela constitue son principal handicap Jones et Lins 1996 Le langage C et comme tout langage de programmation g re la cr ation et la destruction de ces entit s Vu qu il est une exten
151. uments sur lesquels un programmeur peut s appuyer pour d velopper un code s curitaire des erreurs de mise en uvre ayant des cons quences graves pour la s curit existent toujours dans le code source Plus le nombre de lignes augmente plus un contr le manuel des violations de la s curit devient difficile N tant pas appuy e par une gestion implicite la gestion de la m moire en C s est vue toujours comme un exercice difficile voire parfois p rilleux Cette contrainte a toujours pos un d fi consid rable Ce travail de recherche vise d velopper une m thode et un outil qui permettront une gestion et un d bogage implicite de la m moire C Nous nous sommes inspir s des limites de d bogueurs de m moire connues dans le domaine pour r viser certains choix de structuration et de conception de notre outil La programmation par aspect incarnant la s paration des pr occupations et formant un support m thodologique de mod lisation et de programmation a servi de support pour l impl mentation d un outil g n rique et nous avons pu regrouper l aspect m moire en un seul aspect Et en tant soutenus par la programmation par aspect nous avons pu aussi contourner les limites du mod le de programmation par objet Nous avons opt pour une solution raffin e des solutions d j propos es Purify et Memcheck amp Valgrind Cette derni re inclut i un aspect permettant la s curisation des allocations et des d salloc
152. uv malloc enda Figure 4 2 Aspect Malloccounter Le concept est illustr par la Figure 4 3 Lors de chaque appel de la fonction malloc le code aspect de la Figure 4 2 affecte le programme client et se chargera de comptabiliser les appels de malloc Chapitre 4 D veloppement d un outil de gestion implicite et de d bogage 52 de m moire bas sur la programmation par aspect AspectC Debogger A A aspect malloc_counter int main ff int x 0 t ublic myCaic aby i z R ER a E ga Coe ete E Advice cail void malloc myCale mallocisizeofimyCaic size tj ab doSomething 17 void after free cb cout lt lt x lt cendl myCale bb end myCalc malloc sizeof myCalc bb dosomething 1 free bk Figure 4 3 Effet de l aspect apr s tissage Dans cet aspect le point de jointure call void malloc size t se produit toutes les fois qu un appel de malloc est atteint Le conseil after contient la portion de code qui sera ex cut e apr s chaque appel de la fonction malloc et suscite l appel du cout pour incr menter la valeur de X 4 2 2 Les l ments affectant la consommation de m moire dynamique en C Un point cl pour acqu rir des donn es avec AspectC est la correspondance des motifs Pattern Matching c d retrouver des objets similaires dans diff rents codes sources Les points de jointure sont utilis s pour cette fin Par exe
153. x es Nous la pr sentons dans la section suivante 5 1 2 Le Jeu Asteroids L application Asteroids choisie est un jeu 3D Open Source bas sur des vieux classiques d arcade dans lesquels le joueur doit d truire des ast ro des en les cassant en petits morceaux Asteroids a t d velopp sous Visual C 6 0 et avec DirectX 8 1 DirectX est une collection Chapitre 5 Etude de cas et r sultats exp rimentaux 71 de biblioth ques de Microsoft destin es la programmation d applications multim dias plus particuli rement des jeux ou des programmes faisant intervenir de la vid o sur les plates formes Microsoft Xbox syst mes d exploitation Windows Le d veloppement d Asteroids s est d roul durant deux mois et le jeu est ex cutable sur n importe quel syst me d exploitation Windows muni de DirectX et une carte d acc l ration 3D L application comporte un total de 34 classes crites en C et 68 allocations dynamiques d espace m moire http asteroids3d sourceforge net Le code source complet d Asteroids ainsi qu une version compl te du projet ex cutable sur Visual C 6 0 sont t l chargeables partir de sa page web Asteroids 2010 En ce qui concerne DirectX nous n avons pas pu retrouver la version 8 1 nous avions eu recours a la derni re version DirectX 9 1 Le tout a t facilement t l chargeable pour ensuite tre install DirectX 2010 Figure 5 1 Capture d cran du
154. y Consumption with Aspect Oriented Techniques Information Technology European Advancement Mars 2004 W Harrison and H Ossher Subject oriented programming a critique of pure objects in Proc of OOPSLA 93 pp 411 428 1993 Mike Hagen Zhen Zhang Evaluation of Rational Purify Master of Software Engineering Program School of Computer Science Carnegie Mellon University M Hirzel J Henkel A Diwan M Hind Understanding the connectivity of heap objects Proceedings of the third international symposium on Memory management Berlin Germany June 20 21 2002 Hursley An Aspect Oriented Performance Analysis Environment IBM Corporation 2002 IBM Rational Purify http en wikipedia org wiki IBM_Rational_Purify Overview Avril 2008 Develop Fast Reliable Code with IBM Rational PurifyPlus 2003 Bibliographie ISO IEC 2003 JAC 2006 Jones et Lins 1996 Kicsales et al 1997 Kernighan et Ritchie 1988 Levanoni et Petrank 2001 Loriant 2007 Lesiecki 2002 Linux 2009 Marguerie 2009 Meyer 1988 Metropolis et al 1980 Meyer 1988 Mcheick 2006 Mili et al 1999 Nethercote et Seward 2003 Nethercote et Seward 2005 90 ISO ISO IEC 14882 2003 Programming languages C 2003 http www iso org iso en CatalogueDetailPage CatalogueDetail CSNUMBER 38110 http www jac objectweb org AOPSYS compagnie Paris France 2006

Download Pdf Manuals

image

Related Search

Related Contents

Ditec CS12E  ボックスエアコン 取扱説明書  BlackVue DR650 GW 2CH French  Philips 32PFL7605H 32" Full HD  PureLink ProSpeed PS420    

Copyright © All rights reserved.
Failed to retrieve file