Gestion mmoire Corrig jcmdlp0105 gestion mmoire corrig 1
- Slides: 43
Gestion mémoire Corrigé jc/md/lp-01/05 gestion mémoire : corrigé 1
Objectif du chapitre • • Organisation de la mémoire Découpage en slots Rôle du slot 0 Passage d’adresses entre le slot 0 et le slot de l’application jc/md/lp-01/05 gestion mémoire : corrigé 2
Insertion du fichier PTR. h • Fichier PTR. h – – – File→New Project or File Onglet Files →C/C++ Header File Renseigner le champ nom : PTR. h Valider Entrer le texte du fichier • Ce fichier d’entête sera utilisé par PTR_DRV et par PTR_APP jc/md/lp-01/05 gestion mémoire : corrigé 3
PTR. h typedef struct { WCHAR *lp. In. Buffer; WCHAR *lp. Out. Buffer; }MYPTRS, *PMYPTRS; #define IOCTL_POINTEURS CTL_CODE( FILE_DEVICE_UNKNOWN, 2048, METHOD_BUFFERED, FILE_ANY_ACCESS) jc/md/lp-01/05 gestion mémoire : corrigé 4
Insertion du fichier PTR_DRV. def • Fichier PTR_DRV. def – – – File→New Project or File Onglet Files →Text File Renseigner le champ nom : PTR_DRV. def Valider Entrer le texte du fichier jc/md/lp-01/05 gestion mémoire : corrigé 5
PTR_DRV. def LIBRARY PTR_DRV EXPORTS PTR_Init PTR_Deinit PTR_Open PTR_Close PTR_IOControl jc/md/lp-01/05 gestion mémoire : corrigé 6
Structure du driver jc/md/lp-01/05 gestion mémoire : corrigé 7
Entête du driver //Includes #include "stdafx. h" #include <tchar. h> #include <Pkfuncs. h> #include <string. h> #include "PTR. h" //Définitions #define BUFSIZE 256 WCHAR Buffer[BUFSIZE]; jc/md/lp-01/05 gestion mémoire : corrigé 8
Entrée du driver //Entrée du driver BOOL APIENTRY Dll. Main( HANDLE h. Module, DWORD ul_reason_for_call, LPVOID lp. Reserved) { return TRUE; } jc/md/lp-01/05 gestion mémoire : corrigé 9
PTR_Init DWORD PTR_Init(DWORD dw. Context) { DWORD dw. Ret =1; RETAILMSG(1, (TEXT("PTR_DRV: PTR_Initn"))); // Initialisation du buffer de travail à zéro memset (Buffer, 0, BUFSIZE * sizeof(WCHAR)); return dw. Ret; } jc/md/lp-01/05 gestion mémoire : corrigé 10
PTR_Deinit BOOL PTR_Deinit(DWORD h. Device. Context) { BOOL b. Ret = TRUE; RETAILMSG(1, (TEXT("PTR_DRV: PTR_Deinitn"))); return b. Ret; } jc/md/lp-01/05 gestion mémoire : corrigé 11
PTR_Open DWORD PTR_Open(DWORD h. Device. Context, DWORD Access. Code, DWORD Share. Mode) { DWORD dw. Ret = 1; RETAILMSG(1, (TEXT("PTR_DRV: PTR_Openn"))); return dw. Ret; } jc/md/lp-01/05 gestion mémoire : corrigé 12
PTR_Close BOOL PTR_Close(DWORD h. Open. Context) { BOOL b. Ret = TRUE; RETAILMSG(1, (TEXT("PTR_DRV: PTR_Closen"))); return b. Ret; } jc/md/lp-01/05 gestion mémoire : corrigé 13
IOCTL (1) BOOL PTR_IOControl(DWORD h. Open. Context, DWORD dw. Code, PBYTE p. Buf. In, DWORD dw. Len. In, PBYTE p. Buf. Out, DWORD dw. Len. Out, PDWORD pdw. Actual. Out) { jc/md/lp-01/05 gestion mémoire : corrigé 14
IOCTL (2) //Déclarations unsigned int i; HANDLE h. Appelant; BOOL b. Ret ; WCHAR *ptr. Abs_in, *ptr. Abs_out; switch(dw. Code) { jc/md/lp-01/05 gestion mémoire : corrigé 15
IOCTL (3) case IOCTL_POINTEURS: RETAILMSG(1, (TEXT("PTR_DRV: IOCTL_POINTEURS n"))); //Récupération du handle de l'appelant h. Appelant=Get. Caller. Process(); //Mappage des adresses des pointeurs ptr. Abs_in=(WCHAR *)Map. Ptr. To. Process (((PMYPTRS)p. Buf. In)->lp. In. Buffer, h. Appelant); ptr. Abs_out=(WCHAR *)Map. Ptr. To. Process (((PMYPTRS)p. Buf. In)->lp. Out. Buffer, h. Appelant); jc/md/lp-01/05 gestion mémoire : corrigé 16
IOCTL (4) //Impression des valeurs des pointeurs remappés RETAILMSG(1, (TEXT("PTR_DRV: In. Buffer après remapping: %xn"), ptr. Abs_in)); RETAILMSG(1, (TEXT("PTR_DRV: Out. Buffer après remapping: %xn"), ptr. Abs_out)); wcscpy(Buffer, ptr. Abs_in); //lecture du buffer In for(i=0; i<wcslen(Buffer); i++) //modifiation Buffer[i]=(Buffer[i]+0 x 20); wcscpy (ptr. Abs_out, Buffer); //réécriture dans Out jc/md/lp-01/05 gestion mémoire : corrigé 17
IOCTL (5) b. Ret = TRUE; break; default: RETAILMSG(1, (TEXT("PTR_DRV: err IOCTLn"))); b. Ret=FALSE; break; }// Fin du switch return b. Ret; } // Fin IOCTL jc/md/lp-01/05 gestion mémoire : corrigé 18
Génération du driver jc/md/lp-01/05 gestion mémoire : corrigé 19
Création de l’image noyau & driver jc/md/lp-01/05 gestion mémoire : corrigé 20
Application PTR_APP Préparation jc/md/lp-01/05 gestion mémoire : corrigé 21
Application à réaliser • L’application créera 2 buffers prévus pour des textes codés en unicode : In et Out • In contiendra un texte en majuscule • Out contiendra XXXXX • L’application passera au driver une structure contenant l’adresse de ces 2 buffers • Un IOCTL modifiera le buffer OUT • L’application imprimera le buffer modifié jc/md/lp-01/05 gestion mémoire : corrigé 22
Application (1) jc/md/lp-01/05 gestion mémoire : corrigé 23
Application (2) jc/md/lp-01/05 gestion mémoire : corrigé 24
Application (3) jc/md/lp-01/05 gestion mémoire : corrigé 25
Application (4) jc/md/lp-01/05 gestion mémoire : corrigé 26
Application (5) jc/md/lp-01/05 gestion mémoire : corrigé 27
Application PTR_APP Code jc/md/lp-01/05 gestion mémoire : corrigé 28
Entête de l’application //Include et définitions #include "stdafx. h" #include <Pkfuncs. h> #include "PTR. h" #define BUFFER_SIZE 256 int WINAPI Win. Main(HINSTANCE h. Instance, HINSTANCE h. Prev. Instance, LPTSTR lp. Cmd. Line, int n. Cmd. Show) { jc/md/lp-01/05 gestion mémoire : corrigé 29
Création et initialisation des buffers HANDLE h. Driver, h. Ptr; //Définition de la structure de donnée MYPTRS ptr. Loc; //Allocation de buffers In et Out (fonction new) ptr. Loc. lp. In. Buffer = new WCHAR[BUFFER_SIZE]; ptr. Loc. lp. Out. Buffer = new WCHAR[BUFFER_SIZE]; //Initialisation des 2 buffers (wcscpy) wcscpy( ptr. Loc. lp. In. Buffer, _T("AH QUE COUCOU DANS APPLICATION ")); wcscpy (ptr. Loc. lp. Out. Buffer, _T("XXXXXXXXXX")); jc/md/lp-01/05 gestion mémoire : corrigé 30
Impression des diverses adresses //Affichage du buffer de sortie (Message. Box) Message. Box(NULL, ptr. Loc. lp. Out. Buffer, TEXT("PTR_APP Out. Buffer initial"), MB_OK); //Impression des adresses des buffers (RETAILMSG) RETAILMSG(1, (TEXT("PTR_APP: In. Buffer avant remapping : xn"), ptr. Loc. lp. In. Buffer)); RETAILMSG(1, (TEXT("PTR_APP: Out. Buffer avant remapping: xn"), ptr. Loc. lp. Out. Buffer)); jc/md/lp-01/05 gestion mémoire : corrigé 31
Chargement du driver //Chargement du driver (Register. Device) h. Driver=Register. Device(_T("PTR"), 1, _T("PTR_DRV. dll"), 0); if(h. Driver ==NULL) { Message. Box(NULL, _T("Pb au load de PTR_DRV. dll"), _T("PTR_APP"), MB_OK); return 0; } jc/md/lp-01/05 gestion mémoire : corrigé 32
Ouverture du driver //Ouverture du driver en accés Read/Write h. Ptr=Create. File(TEXT("PTR 1: "), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0); if (INVALID_HANDLE_VALUE == h. Ptr) { Message. Box(NULL, _T("Pb Open driver: "), _T("PTR_APP"), MB_OK); //Déchargement du driver Deregister. Device(h. Driver); Close. Handle(h. Driver); return 0; } jc/md/lp-01/05 gestion mémoire : corrigé 33
Appel IOCTL //Appel de l'IOCTL Device. Io. Control(h. Ptr, IOCTL_POINTEURS, &ptr. Loc, sizeof(ptr. Loc), NULL, 0, NULL); //Affichage du buffer de sortie modifié Message. Box(NULL, ptr. Loc. lp. Out. Buffer, TEXT("PTR_APP Out. Buffer modifié"), MB_OK); jc/md/lp-01/05 gestion mémoire : corrigé 34
Fin de l’application //Libération des buffers delete (ptr. Loc. lp. In. Buffer); delete (ptr. Loc. lp. Out. Buffer); //Déchargement et fermeture du driver Close. Handle(h. Ptr); Deregister. Device(h. Driver); Close. Handle(h. Driver); return 0; } jc/md/lp-01/05 gestion mémoire : corrigé 35
Génération de l’application jc/md/lp-01/05 gestion mémoire : corrigé 36
Exécution de l’application • Télécharger dans la cible l’image du noyau avec le driver STR_DRV • Lancer l’application Target→Run Program→STR_APP jc/md/lp-01/05 gestion mémoire : corrigé 37
Début de l’exécution jc/md/lp-01/05 gestion mémoire : corrigé 38
Exécution jc/md/lp-01/05 gestion mémoire : corrigé 39
Messages dans la fenêtre se sortie jc/md/lp-01/05 gestion mémoire : corrigé 40
Adresses avant et après remapping PTR_APP: In. Buffer avant remapping: 30050 PTR_APP: Out. Buffer avant remapping: 30260 PTR_DRV: In. Buffer après remapping: 12030050 PTR_DRV: Out. Buffer après remapping: 12030260 jc/md/lp-01/05 gestion mémoire : corrigé 41
Target→Ce Processes jc/md/lp-01/05 gestion mémoire : corrigé 42
Conclusion • Première approche de l’organisation mémoire • Exemple pratique de communication d’adresses créées dynamiquement dans le slot 0 à un driver jc/md/lp-01/05 gestion mémoire : corrigé 43
- Https://gestion.parcoursup.fr/gestion/authentification
- Indicadores de gestion ambiental
- Pei guatemala
- Mcd gestion reservation hotel
- Soutenance gestion de stock
- Gestion centralisée des lits et places
- Gestion opérationnelle et commandement pdf
- éco gestion
- Facteur rare de production
- Logiciel gestion des connaissances
- Cabinet gestion de projet
- Estrategia del talento humano
- Gestion des correctifs
- Interfase persona tarea
- Gestion matricielle
- Une bote
- Cartographie des flux
- Gestion por funciones
- Gestion de projet : les fondamentaux
- Dinama envases declaracion jurada
- Programa de club de conquistadores
- Exercice diagramme de sequence corrigé
- Gestion matricielle
- Sap module gmao
- Sidcar
- Proyectos de emprendimiento económico
- Organigramme service maintenance
- Gestion de transporte terrestre
- Outil gestion sponsoring
- Gestion de actuaciones policiales gap
- Objectifs controle de gestion
- Essec gestion de patrimoine
- Temario de calidad aplicada a la gestion empresarial
- Gestion ambiental sena
- Sistemas de conocimiento del trabajo (kws)
- Gestion des actifs industriels
- Gestion de configuration documentaire
- Calibre logiciel
- Gestion educativa conclusion
- Sistema de control de gestion
- Ds1
- Ppm gestion de projet
- ("gestión comercial" or erp)
- Gestion administrative et financière d un projet