This shows you the differences between two versions of the page.
so:laboratoare:laborator-07 [2020/03/31 21:27] liza_elena.babu [Exercițiul 0 - Joc interactiv] |
so:laboratoare:laborator-07 [2022/04/19 17:47] (current) teodor_stefan.dutu [Nice to Watch] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Laborator 07 - Profiling & Debugging ====== | ====== Laborator 07 - Profiling & Debugging ====== | ||
- | ===== Materiale ajutătoare ===== | ||
- | |||
- | *[[http://elf.cs.pub.ro/so/res/laboratoare/lab07-slides.pdf | lab07-slides.pdf]] | ||
==== Nice to Watch ==== | ==== Nice to Watch ==== | ||
*[[http://www.youtube.com/watch?v=73IyVBMf2uY | Google I/O 2010 - Measure in milliseconds: Meet Speed Tracer]] | *[[http://www.youtube.com/watch?v=73IyVBMf2uY | Google I/O 2010 - Measure in milliseconds: Meet Speed Tracer]] | ||
- | *[[http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-172-performance-engineering-of-software-systems-fall-2010/video-lectures/lecture-5-performance-engineering-with-profiling-tools/ | MIT Lecture: Performance Engineering with Profiling Tools]] | + | *[[https://www.youtube.com/watch?v=7a89iFEEpTo&ab_channel=MITOpenCourseWare | MIT Lecture: Performance Engineering with Profiling Tools]] |
+ | *[[https://dspace.mit.edu/bitstream/handle/1721.1/122680/6-172-fall-2010/contents/video-lectures/lecture-5-performance-engineering-with-profiling-tools/MIT6_172F10_lec05.pdf|slides]] | ||
==== Latency Comparison Numbers ==== | ==== Latency Comparison Numbers ==== | ||
Line 267: | Line 265: | ||
====== Exerciții ====== | ====== Exerciții ====== | ||
- | <note important>Folosiți arhiva [[http://elf.cs.pub.ro/so/res/laboratoare/lab07-tasks.zip | lab07-tasks.zip]] aferentă laboratorului.</note> | + | <note important> |
+ | În cadrul laboratoarelor vom folosi repository-ul de git al materiei SO - https://github.com/systems-cs-pub-ro/so. Va trebui sa clonați repository-ul pe masinile virtuale folosind comanda: ''git clone https://github.com/systems-cs-pub-ro/so''. Dacă doriți să descărcați repositoryul în altă locație, folosiți comanda ''git clone https://github.com/systems-cs-pub-ro/so ${target}''. | ||
+ | |||
+ | Pentru a actualiza repository-ul, folosiți comanda ''git pull origin master'' din interiorul directorului în care se află repository-ul. Recomandarea este să îl actualizați cât mai frecvent, înainte să începeți lucrul, pentru a vă asigura că aveți versiunea cea mai recentă. În cazul în care gitul detectează conflicte la nivelul vreunui fişier, folosiți următoarele comenzi pentru a vă păstra modificările: | ||
+ | <code> | ||
+ | git stash | ||
+ | git pull origin master | ||
+ | git stash pop | ||
+ | </code> | ||
+ | |||
+ | Pentru mai multe informații despre folosirea utilitarului git, urmați ghidul de la https://gitimmersion.com. | ||
+ | </note> | ||
Line 280: | Line 289: | ||
<note important> | <note important> | ||
- | Pentru a putea face exercițiile e nevoie de utilitarul ''linux-tools''. Puteți verifica asta rulând comanda ''perf %%--%%help''. Dacă comanda nu e găsită, trebuie să instalați pachetul: | + | Pentru a putea face exercițiile e nevoie de pachetul ''linux-tools''. Puteți verifica asta rulând comanda ''perf %%--%%help''. Dacă utilitarul ''perf'' nu este găsit, trebuie să instalați pachetul folosind comenzile: |
<code bash> | <code bash> | ||
student@so:~$ sudo apt-get update | student@so:~$ sudo apt-get update | ||
+ | student@so:~$ sudo apt-get install linux-tools-generic | ||
+ | </code> | ||
+ | <hidden> | ||
+ | <code bash> | ||
+ | Pachetul de mai jos este prea vechi, cred că așa că am pus meta-pachetul generic | ||
student@so:~$ sudo apt-get install linux-tools-4.15.0-34-generic | student@so:~$ sudo apt-get install linux-tools-4.15.0-34-generic | ||
</code> | </code> | ||
+ | </hidden> | ||
</note> | </note> | ||
+ | |||
Line 359: | Line 374: | ||
Observați că diferența între adresa variabilei ''access'' și adresa bufferului ''name'' este de 0x10 (16) octeți, ceea ce înseamnă că variabila ''access'' se află imediat la sfârșitul datelor din bufferul ''name''. | Observați că diferența între adresa variabilei ''access'' și adresa bufferului ''name'' este de 0x10 (16) octeți, ceea ce înseamnă că variabila ''access'' se află imediat la sfârșitul datelor din bufferul ''name''. | ||
+ | |||
+ | <note important> | ||
+ | Este posibil ca diferența dintre ''access'' și ''name'' să difere în funcție de arhitectura pe care lucrați. Calculați diferența dintre cele două adrese folosind valorile printate de ''gdb'' | ||
+ | </note> | ||
Folosindu-vă de informațiile obținute, construiți un input convenabil pe care să îl oferiți executabilului ''exploit'', astfel încât acesta să vă afișeze stringul "Good job, you hacked me!". | Folosindu-vă de informațiile obținute, construiți un input convenabil pe care să îl oferiți executabilului ''exploit'', astfel încât acesta să vă afișeze stringul "Good job, you hacked me!". | ||
Line 414: | Line 433: | ||
/* [[http://elf.cs.pub.ro/so/res/laboratoare/lab12-sol.zip | lab12-sol.zip]] */ | /* [[http://elf.cs.pub.ro/so/res/laboratoare/lab12-sol.zip | lab12-sol.zip]] */ | ||
- | ====== Soluții ====== | ||
- | *[[http://elf.cs.pub.ro/so/res/laboratoare/lab07-sol.zip | Soluții laborator 7]] | ||
====== Resurse utile ====== | ====== Resurse utile ====== |