Jc/md/lp-01/05gestion mémoire : corrigé1 Gestion mémoire Corrigé

Slides:



Advertisements
Présentations similaires
Génération de plate-forme
Advertisements

A RECUPERER EN ENTRANT Le polycopié de Caml Partie 1
Programmation Orienté Objet en C++
Rappels C.
Journées académiques Microsoft 2005
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
C.
Liste générique dans Linux 2.6 Source : Understanding the Linux kernel Chap3 processes p.87.
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
Revision.
Jc/md/lp-01/05Communication inter processus1 Communication inter process Présentation.
Driver de port parallèle
jc/md/lp-01/05IT CE4.2 : cours1 Traitement des interruptions Cours.
Jc/md/lp-01/05TTY_IT : présentation1 TTY_IT Présentation.
Gestion mémoire : présentation
Jc/md/lp-01/05Communication inter processus corrigé1 Communication inter process Corrigé
Driver UART en polling : présentation
Driver de port parallèle
Jc/md/lp-01/06Kernel Tracker1 Debugging Kernel Tracker.
Jc/md/lp-01/05Principe des drivers1 Généralités sur les drivers Présentation.
Jc/md/lp-01/05TTY_IT : corrigé1 TTY_IT Corrigé. jc/md/lp-01/05TTY_IT : corrigé2 Objectif du chapitre Proposer une solution pour les exercices suggérés.
Driver UART en polling : corrigé
Jc/md/lp-01/05Driver élémentaire : corrigé1 Driver élémentaire Émulateur Corrigé
Jc/md/lp-01/05Trains_presentation1 Threads et Synchronisation Application train Présentation.
Jc/md/lp-01/05Driver élémentaire : présentation1 Driver élémentaire Émulateur Présentation.
Jc/md/lp-01/05Trains_corrigé1 Threads et Synchronisation Application train Corrigé
FLSI602 Génie Informatique et Réseaux
FLSI602 Génie Informatique et Réseaux
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
PROGRAMMATION SCIENTIFIQUE EN C PRO Généralités u Présentation du plan de cours –Disponibilité –Références u Environnement de travail –Langage C.
TRAITEMENT DE STRUCTURES
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Les fichiers binaires en C++
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000
Un langage de programmation hybride
8PRO100 Éléments de programmation Les types composés.
C++ : variables Déclaration de variables
LANGAGE C LP A2I IUT St DIE
Structures de données IFT-2000 Abder Alikacem Semaine 12 (2 ième partie) Les B-arbres Département d’informatique et de génie logiciel Édition septembre.
Plan cours La notion de pointeur et d’adresse mémoire.
Les fichiers texte en C++
La librairie assert.h.
Exemple de gestion d'un buffer clavier en liste circulaire
Structures des données
Le langage C Structures de données
Le langage C Rappel Pointeurs & Allocation de mémoire.
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
La notion de type revisitée en POO
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
Un survol du language C.
Labo 4 : Les structures et les entrées et sorties
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
ETNA – 1ème année Guillaume Belmas –
Les types composés Les enregistrements.
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
8PRO100 Éléments de programmation Les pointeurs de caractères.
02/10/2013JC LP MD1 COURS_3. 02/10/2013JC LP MD2 Direct Memory Access DMA.
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Chapitre VII Techniques plus avancées à travers le concept de classe.
Calcul numérique de la transformée de Fourier Applications:
Structures de données et algorithmes – TP1 Maria-Iuliana Dascalu
PRO-1027 Programmation Scientifique en C
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Transcription de la présentation:

jc/md/lp-01/05gestion mémoire : corrigé1 Gestion mémoire Corrigé

jc/md/lp-01/05gestion mémoire : corrigé2 Objectif du chapitre Organisation de la mémoire Découpage en slots Rôle du slot 0 Passage dadresses entre le slot 0 et le slot de lapplication

jc/md/lp-01/05gestion mémoire : corrigé3 Insertion du fichier PTR.h Fichier PTR.h –FileNew Project or File –Onglet Files –C/C++ Header File –Renseigner le champ nom : PTR.h –Valider –Entrer le texte du fichier Ce fichier dentête sera utilisé par PTR_DRV et par PTR_APP

jc/md/lp-01/05gestion mémoire : corrigé4 PTR.h typedef struct { WCHAR *lpInBuffer; WCHAR *lpOutBuffer; }MYPTRS,*PMYPTRS; #define IOCTL_POINTEURS CTL_CODE( FILE_DEVICE_UNKNOWN, 2048, METHOD_BUFFERED, FILE_ANY_ACCESS)

jc/md/lp-01/05gestion mémoire : corrigé5 Insertion du fichier PTR_DRV.def Fichier PTR_DRV.def –FileNew Project or File –Onglet Files –Text File –Renseigner le champ nom : PTR_DRV.def –Valider –Entrer le texte du fichier

jc/md/lp-01/05gestion mémoire : corrigé6 PTR_DRV.def LIBRARY PTR_DRV EXPORTS PTR_Init PTR_Deinit PTR_Open PTR_Close PTR_IOControl

jc/md/lp-01/05gestion mémoire : corrigé7 Structure du driver

jc/md/lp-01/05gestion mémoire : corrigé8 Entête du driver //Includes #include "stdafx.h" #include #include "PTR.h" //Définitions #define BUFSIZE 256 WCHAR Buffer[BUFSIZE];

jc/md/lp-01/05gestion mémoire : corrigé9 Entrée du driver //Entrée du driver BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) { return TRUE; }

jc/md/lp-01/05gestion mémoire : corrigé10 PTR_Init DWORD PTR_Init(DWORD dwContext) { DWORD dwRet =1; RETAILMSG(1,(TEXT("PTR_DRV: PTR_Init\n"))); // Initialisation du buffer de travail à zéro memset (Buffer, 0, BUFSIZE * sizeof(WCHAR)); return dwRet; }

jc/md/lp-01/05gestion mémoire : corrigé11 PTR_Deinit BOOL PTR_Deinit(DWORD hDeviceContext) { BOOL bRet = TRUE; RETAILMSG(1,(TEXT("PTR_DRV: PTR_Deinit\n"))); return bRet; }

jc/md/lp-01/05gestion mémoire : corrigé12 PTR_Open DWORD PTR_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode) { DWORD dwRet = 1; RETAILMSG(1,(TEXT("PTR_DRV: PTR_Open\n"))); return dwRet; }

jc/md/lp-01/05gestion mémoire : corrigé13 PTR_Close BOOL PTR_Close(DWORD hOpenContext) { BOOL bRet = TRUE; RETAILMSG(1,(TEXT("PTR_DRV: PTR_Close\n"))); return bRet; }

jc/md/lp-01/05gestion mémoire : corrigé14 IOCTL (1) BOOL PTR_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut, PDWORD pdwActualOut) {

jc/md/lp-01/05gestion mémoire : corrigé15 IOCTL (2) //Déclarations unsigned int i; HANDLE hAppelant; BOOL bRet ; WCHAR *ptrAbs_in, *ptrAbs_out; switch(dwCode) {

jc/md/lp-01/05gestion mémoire : corrigé16 IOCTL (3) case IOCTL_POINTEURS: RETAILMSG(1,(TEXT("PTR_DRV: IOCTL_POINTEURS \n"))); //Récupération du handle de l'appelant hAppelant=GetCallerProcess(); //Mappage des adresses des pointeurs ptrAbs_in=(WCHAR *)MapPtrToProcess (((PMYPTRS)pBufIn)->lpInBuffer,hAppelant); ptrAbs_out=(WCHAR *)MapPtrToProcess (((PMYPTRS)pBufIn)->lpOutBuffer, hAppelant);

jc/md/lp-01/05gestion mémoire : corrigé17 IOCTL (4) //Impression des valeurs des pointeurs remappés RETAILMSG(1,(TEXT("PTR_DRV: InBuffer après remapping:%x\n"), ptrAbs_in)); RETAILMSG(1,(TEXT("PTR_DRV: OutBuffer après remapping:%x\n"),ptrAbs_out)); wcscpy(Buffer,ptrAbs_in); //lecture du buffer In for(i=0;i<wcslen(Buffer);i++) //modifiation Buffer[i]=(Buffer[i]+0x20); wcscpy (ptrAbs_out,Buffer); //réécriture dans Out

jc/md/lp-01/05gestion mémoire : corrigé18 IOCTL (5) bRet = TRUE; break; default: RETAILMSG(1,(TEXT("PTR_DRV: err IOCTL\n"))); bRet=FALSE; break; }// Fin du switch return bRet; } // Fin IOCTL

jc/md/lp-01/05gestion mémoire : corrigé19 Génération du driver

jc/md/lp-01/05gestion mémoire : corrigé20 Création de limage noyau & driver

jc/md/lp-01/05gestion mémoire : corrigé21 Application PTR_APP Préparation

jc/md/lp-01/05gestion mémoire : corrigé22 Application à réaliser Lapplication créera 2 buffers prévus pour des textes codés en unicode : In et Out In contiendra un texte en majuscule Out contiendra XXXXXXXXX Lapplication passera au driver une structure contenant ladresse de ces 2 buffers Un IOCTL modifiera le buffer OUT Lapplication imprimera le buffer modifié

jc/md/lp-01/05gestion mémoire : corrigé23 Application (1)

jc/md/lp-01/05gestion mémoire : corrigé24 Application (2)

jc/md/lp-01/05gestion mémoire : corrigé25 Application (3)

jc/md/lp-01/05gestion mémoire : corrigé26 Application (4)

jc/md/lp-01/05gestion mémoire : corrigé27 Application (5)

jc/md/lp-01/05gestion mémoire : corrigé28 Application PTR_APP Code

jc/md/lp-01/05gestion mémoire : corrigé29 Entête de lapplication //Include et définitions #include "stdafx.h" #include #include "PTR.h" #define BUFFER_SIZE 256 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {

jc/md/lp-01/05gestion mémoire : corrigé30 Création et initialisation des buffers HANDLE hDriver,hPtr; //Définition de la structure de donnée MYPTRS ptrLoc; //Allocation de buffers In et Out (fonction new) ptrLoc.lpInBuffer = new WCHAR[BUFFER_SIZE]; ptrLoc.lpOutBuffer = new WCHAR[BUFFER_SIZE]; //Initialisation des 2 buffers (wcscpy) wcscpy( ptrLoc.lpInBuffer, _T("AH QUE COUCOU DANS APPLICATION ")); wcscpy (ptrLoc.lpOutBuffer, _T("XXXXXXXXXXXXXXXXXXXX"));

jc/md/lp-01/05gestion mémoire : corrigé31 Impression des diverses adresses //Affichage du buffer de sortie (MessageBox) MessageBox(NULL, ptrLoc.lpOutBuffer, TEXT("PTR_APP OutBuffer initial"), MB_OK); //Impression des adresses des buffers (RETAILMSG) RETAILMSG(1,(TEXT("PTR_APP: InBuffer avant remapping :x\n"),ptrLoc.lpInBuffer)); RETAILMSG(1,(TEXT("PTR_APP: OutBuffer avant remapping:x\n"),ptrLoc.lpOutBuffer));

jc/md/lp-01/05gestion mémoire : corrigé32 Chargement du driver //Chargement du driver (RegisterDevice) hDriver=RegisterDevice (_T("PTR"),1,_T("PTR_DRV.dll"),0); if(hDriver ==NULL) { MessageBox(NULL, _T("Pb au load de PTR_DRV.dll"),_T("PTR_APP"), MB_OK); return 0; }

jc/md/lp-01/05gestion mémoire : corrigé33 Ouverture du driver //Ouverture du driver en accés Read/Write hPtr=CreateFile(TEXT("PTR1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL,OPEN_EXISTING,0,0); if (INVALID_HANDLE_VALUE == hPtr) { MessageBox(NULL, _T("Pb Open driver:"), _T("PTR_APP"), MB_OK); //Déchargement du driver DeregisterDevice(hDriver); CloseHandle(hDriver); return 0; }

jc/md/lp-01/05gestion mémoire : corrigé34 Appel IOCTL //Appel de l'IOCTL DeviceIoControl(hPtr,IOCTL_POINTEURS,&ptrLoc, sizeof(ptrLoc),NULL,0,NULL,NULL); //Affichage du buffer de sortie modifié MessageBox(NULL, ptrLoc.lpOutBuffer, TEXT("PTR_APP OutBuffer modifié"),MB_OK);

jc/md/lp-01/05gestion mémoire : corrigé35 Fin de lapplication //Libération des buffers delete (ptrLoc.lpInBuffer); delete (ptrLoc.lpOutBuffer); //Déchargement et fermeture du driver CloseHandle(hPtr); DeregisterDevice(hDriver); CloseHandle(hDriver); return 0; }

jc/md/lp-01/05gestion mémoire : corrigé36 Génération de lapplication

jc/md/lp-01/05gestion mémoire : corrigé37 Exécution de lapplication Télécharger dans la cible limage du noyau avec le driver STR_DRV Lancer lapplication TargetRun ProgramSTR_APP

jc/md/lp-01/05gestion mémoire : corrigé38 Début de lexécution

jc/md/lp-01/05gestion mémoire : corrigé39 Exécution

jc/md/lp-01/05gestion mémoire : corrigé40 Messages dans la fenêtre se sortie

jc/md/lp-01/05gestion mémoire : corrigé41 Adresses avant et après remapping PTR_APP: InBuffer avant remapping:30050 PTR_APP: OutBuffer avant remapping:30260 PTR_DRV: InBuffer après remapping: PTR_DRV: OutBuffer après remapping:

jc/md/lp-01/05gestion mémoire : corrigé42 TargetCe Processes

jc/md/lp-01/05gestion mémoire : corrigé43 Conclusion Première approche de lorganisation mémoire Exemple pratique de communication dadresses créées dynamiquement dans le slot 0 à un driver