User Tools

Site Tools


advanced-unix:capitole:capitol-02

Differences

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

Link to this comparison view

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''​).
advanced-unix/capitole/capitol-02.1462866747.txt.gz · Last modified: 2016/05/10 10:52 by razvan