Advertisement
pan7nikt

sysopv2_2.1.5

Apr 4th, 2025
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.34 KB | None | 0 0
  1. #2.1.5
  2.  
  3. #1. Należy wskazać trzy różnice pomiędzy uruchomionym programem skonsolidowanym statycznie i dynamicznie:
  4. #a) w jakiej sytuacji nie może zostać utworzony proces po uruchomieniu programu;
  5.  
  6. #W przypadku programu skonsolidowanego dynamicznie nie może zostać utworzony proces po uruchomieniu programu, ponieważ brakuje biblioteki libsodium.
  7.  
  8. echo -e '\033[0;32m---------2.1.5.1 (A)--------\nProba uruchomiena programu skonsolidowanego dynamicznie bez biblioteki\033[0m'
  9. sudo dnf remove libsodium -yq
  10. ldd prog | grep --color -E "not found|$"
  11. ldd sprog
  12. ./prog
  13. ./sprog
  14. echo -e '\033[0;32mInstalacja brakujacej biblioteki\033[0m'
  15. sudo dnf install libsodium -yq
  16. ldd prog | grep --color -E "libsodium.so.26 =>|$"
  17. ldd sprog
  18. ./prog
  19. ./sprog
  20.  
  21. #b) porównanie liczby nieanonimowych segmentów pamięci w mapie pamięci każdego z procesów - wymagane wskazanie nieanonimowego segmentu pamięci zawierającego odpowiednio text/zmienne/stałe;
  22.  
  23. echo -e '\033[0;32m---------2.1.5.1 (B)--------\n Liczba nieanonimowych segmentow pamieci w mapie pamieci (fragmentu pamieci o ciaglej logicznej adresacji pamieci)\033[0m'
  24. #uruchomić w oddzielnych oknach terminala program sprog i prog
  25. pidof prog
  26. pidof sprog
  27. pmap -x $(pidof prog) | grep --color -E "Mode|Mapping|$"
  28. pmap -x $(pidof sprog) | grep --color -E "Mode|Mapping|$"
  29. echo -e 'r---- stale\nrw--- zmienne\nr-x-- text\nNieanonimowe bez [anon] i [stack]\n\033[0;32m- Wiecej segmentow nieanonimowych dla procesu utworzonego wskutek uruchomienia programu skonsolidowanego dynamicznie\033[0m\nnieanonimowe segmenty to te, gdzie dane lub tekst wczytane zostaly z pliku wykonywalnego lub zawierajacego biblioteke';
  30.  
  31. #c) korzystając z narzędzia top/htop należy wykazać rozmiar pamięci wirtualnej (ozn. VSZ/VIRT), rozmiar zajmowanej ulotnej pamięci fizycznej (ozn. RSZ/RSS/RES) oraz rozmiar pamięci, która może być potencjalnie współdzielona (ozn. SHR) przez każdy z procesów z innymi procesami.
  32. htop
  33. #F4 aby filtrować (wpisać prog i enter)
  34.  
  35.    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                
  36.    8022 root      20   0    2940   1480   1480 S   0,0   0,0   0:00.00 prog                                    
  37.    8444 root      20   0    1380    928    928 S   0,0   0,0   0:00.00 sprog  
  38.  
  39. #VSZ/VIRT prog ma więcej, bo ładuje biblioteki współdzielone (dynamiczne).
  40. #RSZ/RSS/RES większe dla prog, bo załadowane są również fragmenty bibliotek współdzielonych do pamięci fizycznej.
  41. #SHR (Shared memory): Większe w prog, bo dzieli segmenty bibliotek dynamicznych z innymi procesami.
  42. #większe dla prog, bo współdzieli biblioteki dynamiczne (np. glibc, libsodium) z innymi procesami.
  43.  
  44. #Jak dla pliku regularnego zawierającego program wykonywalny lub bibliotekę wspólną ELF określić rodzaj zastosowanej konsolidacji?
  45.  
  46. echo -e '\033[0;32m---------2.1.5.1 (D)--------\nOKRESLENIE RODZAJU ZASTOSOWANEJ KONSOLIDACJI\033[0m\n\033[0;32mdla biblioteki\033[0m'
  47. file /usr/lib64/libc.so.6 | grep --color -E "dynamically linked|$"
  48. echo -e '\033[0;32mdla programu dynamicznie skonsolidowanego\033[0m'
  49. file prog | grep --color -E "dynamically linked|$"
  50. echo -e '\033[0;32mdla programu statycznie skonsolidowanego\033[0m'
  51. file sprog | grep --color -E "statically linked|$"
  52.  
  53. #2. Dla programu oraz biblioteki skonsolidowanej dynamicznie należy wykazać listę wymaganych bibliotek i wykazać listę wszystkich bibliotek zarządzanych przez linker? - każdy uczestnik zajęć wybiera do eksperymentu inny niż pozostali program ELF oraz inną niż pozostali bibliotekę ELF (nie można wybrać programu prog oraz biblioteki libsodium).
  54. #sciezki do programu mozemu szukac poleceniem: which
  55.  
  56. echo -e '\033[0;32m---------2.1.5.2--------\nLista bibliotek wymaganych przez program\033[0m'
  57. ldd /usr/bin/find
  58. echo -e '\033[0;32mi biblioteke skonsolidowana dynamicznie\033[0m'
  59. ldd /usr/lib64/libc.so.6
  60. #ew. ldd libselinux.so.1
  61. echo -e '\033[0;32mIlosc bibliotek w linkerze\033[0m'
  62. ldconfig -p | grep bibliotek
  63. echo -e '\033[0;32mWszystkie biblioteki zarzadzane przez linker\033[0m'
  64. ldconfig -p
  65.  
  66. #3. Wykazać dla uruchomionego programu ELF czas przetwarzania w trybie uprzywilejowanym i czas przetwarzania w trybie nieuprzywilejowanym, dlaczego suma tych czasów nie musi być zgodna z czasem cyklu życia (istnienia) procesu. Skąd pochodzi kod przetwarzany przez proces w trybie uprzywilejowanym, a skąd pochodzi kod przetwarzany przez proces w trybie nieuprzywilejowanym.  W jakiej sytuacji następuje zmiana trybu przetwarzania z nieuprzywilejowanego na uprzywilejowany?
  67.  
  68. echo -e '\033[0;32m---------2.1.5.3--------\nCzas przetwarzania w trybie nieuprzywilejowanym i uprzywilejowanym\033[0m'
  69. time ls
  70.  
  71. echo -e '\033[0;32m- Suma tych czasow nie musi byc zgodna, poniewaz proces w trakcie swojego zycia nie musi byc przetwarzany w zadnym trybie (moze np. oczekiwac na input)\n- proces pochodzi\nw uprzywilejowanym: z jadra\nw nieuprzywilejowanym: z programu lub biblioteki.\n- Zmiana nastepuje w momencie zgloszenia wywolania systemowego przez proces (rozkaz pulapki)\033[0m'
  72.  
  73.  
  74. #4. Czym jest wywołanie systemowe i która z bibliotek oferuje procesom możliwość zgłaszania wywołań systemowych? - wykazanie, który z procesów utworzonych w wyniku uruchomienia udostępnionych w zadaniu programów ELF (zakładając identyczny kod źródłowy obu programów wykonywalnych, skonsolidowanych odpowiednio statycznie i dynamicznie) zgłaszał mniej wywołań systemowych.
  75.  
  76. echo -e '\033[0;32m---------2.1.5.4--------\nWywolanie systemowe to rozwiazanie/funkcjonalnosc (procedura obslugi wywolania systemowego), ktore umozliwia procesowi skorzystanie z funkcjonalnosci oferowanych przez jadro\033[0m\nTakie wywolania umozliwia biblioteka \033[0;32mVDSO\033[0m\nFragment kodu uruchamiany po wykonaniu wywolania systemowego to \033[0;32mPROCEDURA\033[0m\n\n\n\033[0;32mPorownanie ilosci zgloszen wywolan systemowych\033[0m'
  77.  
  78. strace -c ./prog
  79. strace -c ./sprog
  80.  
  81. echo -e '\033[0;32mprog\033[0m miał więcej wywołań systemowych ze względu na dynamiczne ładowanie bibliotek'
  82.  
  83. #Patrzymy na calls/total
  84. #Z reguły sprog (statyczny) zgłasza mniej wywołań na starcie, bo nie potrzebuje ładowania bibliotek
  85. #prog (dynamiczny) będzie miał więcej wywołań systemowych, przez dynamiczne ładowanie bibliotek
  86.  
  87. #cat /proc/$(pidof prog)/maps | grep vdso   - mozemy udowodnić użycie VDSO
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement