Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so:laboratoare:laborator-06 [2021/04/04 10:19]
maria.mihailescu [Exercițiul 4 - Tipuri de acces pentru pagini]
so:laboratoare:laborator-06 [2022/04/13 15:14] (current)
teodor_stefan.dutu [Exercițiul 3 - Detectare 'buffer underrun' folosind ElectricFence]
Line 547: Line 547:
 </​code>​ </​code>​
  
-În cazul unor excepții cauzate de un acces invalid la memorie''​ExceptionCode''​ va fi setat la ''​EXCEPTION_ACCESS_VIOLATION''​ sau ''​EXCEPTION_DATATYPE_MISALIGNMENT''​, iar ''​ExceptionAddress''​ la adresa instrucțiunii care a cauzat excepția''​NumberParameters''​ va fi setat pe 2, iar prima intrare în ''​ExceptionInformation''​ va fi ''​0''​ dacă s-a efectuat o operație de citire sau ''​1''​ dacă s-a efectuat o operație de scriere. A doua intrare din ''​ExceptionInformation''​ va conține adresa virtuală la care s-a încercat accesarea fără drepturi, fapt care a dus la generarea excepției. Așadar, corespondentul câmpului ''​si_addr''​ din structura ''​siginfo_t''​ de pe Linux este ''​ExceptionInformation''​ pe Windows, NU ''​ExceptionAddress''​.+În cazul unor excepții cauzate de un acces invalid la memorie
 +    * ''​ExceptionCode''​ va fi setat la ''​EXCEPTION_ACCESS_VIOLATION''​ sau ''​EXCEPTION_DATATYPE_MISALIGNMENT''​ 
 +    * ''​ExceptionAddress''​ la adresa instrucțiunii care a cauzat excepția 
 +    * ''​NumberParameters''​ va fi setat pe 2 
 +    * Prima intrare în ''​ExceptionInformation''​ va fi ''​0''​ dacă s-a efectuat o operație de citire sau ''​1''​ dacă s-a efectuat o operație de scriere. 
 +    * A doua intrare din ''​ExceptionInformation''​ va conține adresa virtuală la care s-a încercat accesarea fără drepturi, fapt care a dus la generarea excepției. 
 + 
 +<color red>Așadar, corespondentul câmpului ''​si_addr''​ din structura ''​siginfo_t''​ de pe Linux este ''​ExceptionInformation''​ pe Windows, NU ''​ExceptionAddress''​. ​</​color>​ 
 + 
 +Funcția de tratare a excepției înregistrată cu [[http://​msdn.microsoft.com/​en-us/​library/​ms679274%28VS.85%29.aspx|AddVectoredExceptionHandler]] trebuie să întoarcă una din următoarele valori (macro-uri):​ 
 +   * ''​EXCEPTION_CONTINUE_EXECUTION'',​ dacă excepția a fost tratată și se dorește continuarea execuției 
 +   * ''​EXCEPTION_CONTINUE_SEARCH''​ pentru a continua parcurgerea listei de funcții de tratare a excepțiilor,​ în caz că au fost înregistrate mai multe astfel de funcții. 
 + 
 +===== Sumar ===== 
 + 
 + 
 +^ Operație ^ Linux ^ Windows^ 
 +| Maparea unui fișier ​ | [[#​maparea_fisierelor|mmap]] | [[#​maparea_fisierelor1|CreateFileMapping]] + [[#​maparea_fisierelor1|MapViewOfFile]] | 
 +| Demaparea unui fișier ​ | [[#​demaparea_unei_zone_din_spatiul_de_adresa|munmap]] | [[#​demaparea_unei_zone_din_spatiul_de_adresa1|UnmapViewOfFile]] | 
 +| Maparea unei zone de memorie ​ | [[#​maparea_fisierelor|mmap]] | [[#​alocare_de_memorie_in_spatiul_de_adresa_al_procesului1|VirtualAlloc]] | 
 +| Demaparea unei zone de memorie ​ | [[#​demaparea_unei_zone_din_spatiul_de_adresa|munmap]]| [[#​demaparea_unei_zone_din_spatiul_de_adresa1|VirtualFree]] | 
 +| Redimensionarea unei zone mapate ​ | [[#​redimensionarea_unei_zone_mapate|mremap]] | - | 
 +| Schimbarea protecției unei zone mapate ​ | [[#​schimbarea_protectiei_unei_zone_mapate|mprotect]] | [[#​schimbarea_protectiei_unei_zone_mapate1|VirtualProtect]] | 
 +| Blocarea paginării ​ | [[#​blocarea_paginarii|mlock]] | [[#​blocarea_paginarii1|VirtualLock]] | 
 +| Deblocarea paginării ​ | [[#​blocarea_paginarii|munlock]] | [[#​blocarea_paginarii1|VirtualUnlock]] | 
 +| Interogarea zonelor mapate ​ | - | [[#​interogarea_zonelor_mapate|VirtualQuery]] | 
 +|Excepții (accesul incorect la memorie) ​ |Programul primește SIGSEGV sau SIGBUS. \\ \\ Dacă se folosește o funcție de tip ''​sa_sigaction''​ pentru interceptarea semnalelor, atunci structura [[#​exceptii|siginfo_t]] primită ca parametru conține informații referitoare la ce a cauzat excepția (semnalul, adresa, cauza excepției).|Pentru tratarea excepțiilor se pot folosi funcțiile [[#​exceptii1|AddVectoredExceptionHandler]] și [[#​exceptii1|RemoveVectoredExceptionHandler]] împreună cu o funcție de tratare a excepțiilor.| 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
  
-Funcția de tratare a excepției înregistrată cu [[http://​msdn.microsoft.com/​en-us/​library/​ms679274%28VS.85%29.aspx|AddVectoredExceptionHandler]] trebuie să întoarcă ''​EXCEPTION_CONTINUE_EXECUTION'',​ dacă excepția a fost tratată și se dorește continuarea execuției, sau ''​EXCEPTION_CONTINUE_SEARCH''​ pentru a continua parcurgerea listei de funcții de tratare a excepțiilor,​ în caz că au fost înregistrate mai multe astfel de funcții. 
 ===== Exerciții ===== ===== Exerciții =====
  
Line 566: Line 599:
  
 <​note>​ Pentru a vă ajuta la implementarea exercițiilor din laborator, în directorul ''​utils''​ din arhivă există un fișier ''​utils.h''​ cu funcții utile. </​note>​ <​note>​ Pentru a vă ajuta la implementarea exercițiilor din laborator, în directorul ''​utils''​ din arhivă există un fișier ''​utils.h''​ cu funcții utile. </​note>​
 +
 +==== Exercițiul 0 - GSOC ====
 +
 +Google Summer of Code este un program de vară în care studenții
 +(indiferent de anul de studiu) sunt implicați în proiecte Open Source
 +pentru a își dezvolta skill-urile de programare, fiind răsplătiți cu o
 +bursă a cărei valoare [[https://​developers.google.com/​open-source/​gsoc/​help/​student-stipends|depinde de țară]]
 +([[https://​developers.google.com/​open-source/​gsoc|pagină principală GSOC]]).
 +
 +UPB se află în top ca număr de studenți acceptați; în fiecare an fiind undeva la aprox. 30-40 de studenți acceptați.
 +Vă încurajăm să aplicați!
 +
  
 ===== Linux ===== ===== Linux =====
Line 633: Line 678:
  
 <code bash> <code bash>
-$ wget http://​ro.archive.ubuntu.com/​ubuntu/​pool/​main/​e/​electric-fence/​electric-fence_2.2.4_i386.deb +$ wget http://​ro.archive.ubuntu.com/​ubuntu/​pool/​main/​e/​electric-fence/​electric-fence_2.2.4_amd64.deb 
-$ sudo dpkg -i electric-fence_2.2.4_i386.deb+$ sudo dpkg -i electric-fence_2.2.4_amd64.deb
 </​code>​ </​code>​
 </​note>​ </​note>​
Line 737: Line 782:
 Testați comportamentul programului când se fac accese de citire și scriere în aceste zone. Urmăriți comentariile cu ''​TODO 1''​. Testați comportamentul programului când se fac accese de citire și scriere în aceste zone. Urmăriți comentariile cu ''​TODO 1''​.
  
-Adăugați un handler de tratare a excepțiilor care să remapeze incremental zonele cu protecție de citire și scriere la generarea excepțiilor. Astfel, dacă pagina nu are vreun drept, la page fault se va remapa cu drepturi de citire. Dacă pagina are drepturi de citire, la page fault se va remapa cu drepturi de citire + drepturi de scriere. Urmăriți comentariile cu ''​TODO 2''​.+Adăugați un handler de tratare a excepțiilor care să remapeze incremental zonele cu protecție de citire și scriere la generarea excepțiilor. Astfel, dacă pagina nu are niciun ​drept, la page fault se va remapa cu drepturi de citire. Dacă pagina are drepturi de citire, la page fault se va remapa cu drepturi de citire + drepturi de scriere. Urmăriți comentariile cu ''​TODO 2''​.
  
 <note important>​ <note important>​
Line 763: Line 808:
   * Care sunt cele mai importante diferențe între metoda [[https://​docs.python.org/​2/​library/​mmap.html|mmap]] din modulul de Python cu același nume și funcția [[http://​man7.org/​linux/​man-pages/​man2/​mmap.2.html|nativă]] din Linux?   * Care sunt cele mai importante diferențe între metoda [[https://​docs.python.org/​2/​library/​mmap.html|mmap]] din modulul de Python cu același nume și funcția [[http://​man7.org/​linux/​man-pages/​man2/​mmap.2.html|nativă]] din Linux?
        
-===== Soluții ===== 
- 
- ​[[http://​elf.cs.pub.ro/​so/​res/​laboratoare/​lab06-sol.zip | Soluții exerciții laborator 6]] 
  
 ===== Resurse Utile ===== ===== Resurse Utile =====
so/laboratoare/laborator-06.1617520787.txt.gz · Last modified: 2021/04/04 10:19 by maria.mihailescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0