This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
advanced-unix:capitole:capitol-02 [2016/05/10 07:30] razvan [2. Sisteme de fișiere] |
advanced-unix:capitole:capitol-02 [2016/05/16 12:28] (current) razvan [Compilare pe 32 de biți] |
||
---|---|---|---|
Line 88: | Line 88: | ||
==== Construire fișier cu informații binare ==== | ==== Construire fișier cu informații binare ==== | ||
- | Creați un fișier care să conțină 2048 de octeți de zero urmați de 2048 de octeți aleatori urmați de 2048 de octeți de zero și apoi urmați de 2048 de octeți din fișierul ''/dev/sda1'' de la offsetul 4096 al fișierului. | + | Creați un fișier care să conțină 2048 de octeți de zero (din ''/dev/zero'') urmați de 2048 de octeți aleatori (din ''/dev/urandom'') urmați de 2048 de octeți de zero și apoi urmați de 2048 de octeți din fișierul ''/bin/false'' de la offsetul 4096 al fișierului. |
<note important> | <note important> | ||
Line 104: | Line 104: | ||
</note> | </note> | ||
- | ==== Compilare pe 32 de biți ==== | + | ==== Compilare fișier ==== |
- | Creați un fișier ''.c'' care să afișeze mesajul ''Hello, world!''. Compilați-l pentru a obține un executabil pe 32 de biți. Verificați folosind comanda ''file'' că este un executabil format ELF (//Executable and Linking Format//) pe 32 de biți. Apoi rulați-l. | + | Creați un fișier ''.c'' care să afișeze mesajul ''Hello, world!''. Compilați-l pentru a obține un executabil. Verificați folosind comanda ''file'' că este un executabil format ELF (//Executable and Linking Format//). Apoi rulați-l. |
==== debsums ==== | ==== debsums ==== | ||
Line 114: | Line 114: | ||
==== chroot și executabile statice ==== | ==== chroot și executabile statice ==== | ||
- | Din fișierul ''C'' de mai sus creați un executabil static. Puneți acel fișier în directorul ''/tmp/chroot/'' (trebuie să-l creați în prealabil). Rulați executabilul obținut folosind comanda ''chroot'' (adică rulați-l având ca director rădăcină, chroot-at, directorul ''/tmp/chroot''. | + | Din fișierul ''C'' de mai sus creați un executabil static. |
+ | |||
+ | <note tip> | ||
+ | Pentru a compila static folosiți opțiunea ''-static'' la ''gcc''. Adică similar cu | ||
+ | <code> | ||
+ | gcc -Wall -static hello.c -o hello-static | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | <note tip> | ||
+ | Un executabil static nu depinde de biblioteci externe. Puteți vedea acest lucru cu ajutorul comenzii ''ldd'' (list dynamic dependencies) peste un executabil static sau dinamic, similar rulării de mai jos: | ||
+ | <code> | ||
+ | ldd ./hello | ||
+ | ldd ./hello-static | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | Puneți acel fișier în directorul ''/tmp/chroot/'' (trebuie să-l creați în prealabil). Rulați executabilul obținut folosind comanda ''chroot'' (adică rulați-l având ca director rădăcină, chroot-at, directorul ''/tmp/chroot''). | ||
+ | |||
+ | <note tip> | ||
+ | Comanda ''chroot'' poate fi rulat doar de ''root''. Puteți rula în forma | ||
+ | <code> | ||
+ | sudo chroot /tmp/chroot /hello-static | ||
+ | </code> | ||
+ | </note> | ||
Încercați apoi același lucru pe un executabil dinamic. Observați că nu funcționează. Copiați în directorul de chroot (''/tmp/chroot/'') bibliotecile aferente în directoarele corespunzătoare, astfel încât să funcționeze. | Încercați apoi același lucru pe un executabil dinamic. Observați că nu funcționează. Copiați în directorul de chroot (''/tmp/chroot/'') bibliotecile aferente în directoarele corespunzătoare, astfel încât să funcționeze. | ||
+ | |||
+ | <note tip> | ||
+ | Bibliotecile le determinați cu ajutorul comenzii ''ldd'' peste executabilul dinamic. | ||
+ | </note> | ||
+ | |||
+ | <note tip> | ||
+ | Folosiți opțiunea ''%%--parents%%'' pentru ''cp'' pentru a crea la destinație calea completă către fișierele de tip bibliotecă. | ||
+ | </note> | ||
Adăugați în fișierul ''C'' un apel de tipul ''sleep'' sau ''pause'' și refaceți pașii de mai sus. În timp ce executabilul rulează porniți, din altă consolă, o comandă ''lsof'' pentru a afișa fișierele deschide de acest proces. Observați directorul rădăcină al procesului (''rtd''). | Adăugați în fișierul ''C'' un apel de tipul ''sleep'' sau ''pause'' și refaceți pașii de mai sus. În timp ce executabilul rulează porniți, din altă consolă, o comandă ''lsof'' pentru a afișa fișierele deschide de acest proces. Observați directorul rădăcină al procesului (''rtd''). |