La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "Jc/md/lp-01/05gestion mémoire : corrigé1 Gestion mémoire Corrigé"— Transcription de la présentation:

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

2 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

3 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

4 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)

5 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

6 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

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

8 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];

9 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; }

10 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; }

11 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; }

12 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; }

13 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; }

14 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) {

15 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) {

16 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);

17 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

18 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

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

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

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

22 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é

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

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

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

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

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

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

29 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) {

30 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"));

31 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));

32 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; }

33 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; }

34 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);

35 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; }

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

37 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

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

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

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

41 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:12030050 PTR_DRV: OutBuffer après remapping:12030260

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

43 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


Télécharger ppt "Jc/md/lp-01/05gestion mémoire : corrigé1 Gestion mémoire Corrigé"

Présentations similaires


Annonces Google