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 10:52] razvan [Construire fișier cu informații binare] |
advanced-unix:capitole:capitol-02 [2016/05/16 12:28] (current) razvan [Compilare pe 32 de biți] |
||
---|---|---|---|
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''). |