Instrumente Unix pentru explorarea fișierelor obiect

Arta programării moderne a computerului este o combinație a unei personalități umane cu un set de instrumente speciale care generează un produs destul de iluzoriu - software - pe care alții îl consideră util. Programatorii sunt oameni răbdători care nu sunt prea leneși pentru a înțelege toate problemele calculatoarelor. Computerele sunt foarte scrupuloase în nevoile lor și absolut nu pot tolera abaterile de la aceste nevoi. Oricare ar fi depozitul personajului tău, programarea calculatoarelor este destul de dificilă și au fost create multe instrumente pentru a simplifica această sarcină.







În sistemele de operare UNIX® și Linux®, lucrul principal este fișierele. Putem spune că esența programării în UNIX și Linux este scrierea unui cod care funcționează cu fișiere. Există multe tipuri de fișiere în sistem. Fișierele cu obiecte au un design special, care le oferă utilizarea multifuncțională flexibilă.

Instrumente de artizanat

În lumea programării pe calculator, se folosesc multe formate de fișiere obiect. În mediul DOS, sunt utilizate formate COM. OBJ și EXE. UNIX și Linux folosesc a.out. COFF și ELF. Microsoft® Windows® utilizează formatul de fișier executabil portabil (PE), iar Macintosh utilizează PEF. Mach-O și altele.

Inițial propriul format de fișier obiect există pentru fiecare tip de computer, dar odată cu apariția UNIX și a altor sisteme de operare care pot fi transferate de la o platforma hardware la alta, unele formate de fișiere comune, care au ajuns la nivelul unui standard comun. Printre acestea din urmă - formatele a.out. COFF și ELF.

Pentru a înțelege fișierul obiect de dispozitiv, aveți nevoie de instrumente care pot citi diferite părți ale fișierului obiect și le puteți afișa într-un format mai ușor de utilizat. Acest articol prezintă unele dintre cele mai importante aspecte legate de aceste instrumente. Dar mai întâi trebuie să creați un loc de muncă și să puneți o victimă pe el. nu, pacientul.

la locul de muncă

Porniți sesiunea xterm. Să începem să studiem fișierele obiect cu crearea unui loc de muncă curat. Următoarele comenzi vor crea un loc convenabil pentru lucrul cu fișiere obiect:

Listarea 1. Programul hw.c

Acesta este un program simplu "Hello World", care va servi ca pacient în studiul diferitelor instrumente disponibile în arsenalul UNIX. În loc să folosim căi scurte pentru a crea un fișier executabil (și există multe astfel de căi), vom construi și studia fișierul obiect ca atare.

Formatele fișierelor

De obicei, rezultatul compilatorului C este codul de asamblare pentru procesorul pe care l-ați specificat. Codul de asamblare este trecut la programul de asamblare, care implicit creează bunicul tuturor fișierelor obiect - fișier a.out. Numele în sine indică rezultatul asamblării. Pentru a crea fișierul a.out, introduceți următoarea comandă în fereastra xterm:

Această comandă a creat un fișier nou, hw.s, care conține textul care ajunge la intrarea în asamblare. De obicei, nu îl vedeți, deoarece în mod implicit compilatorul creează fișierul a.out. După cum era de așteptat, programul de asamblare UNIX poate procesa fișierul de intrare de acest tip și poate crea fișierul a.out.

Dispozitive UNIX

Presupunând că compilația a avut succes și a apărut fișierul a.out, să examinăm. Printre alte instrumente utile în studierea fișierelor obiect, există următoarele:

  • nm: Afișează o listă cu simbolurile fișierului obiect.
  • objdump: Afișează informațiile detaliate conținute în fișierele obiect.
  • readelf: Afișează informații despre fișierele obiectului ELF.

Primul instrument din listă este nm, care emite o listă de simboluri de fișier obiect. Dacă tastați nm. veți observa că implicit caută un fișier numit a.out Dacă nu există un astfel de fișier, utilitarul își va exprima nemulțumirea. Cu toate acestea, dacă instrumentul găsește un fișier a.out creat de compilator, acesta emite o listă similară cu Lista 2.







Listing 2. Rezultatul comenzii nm

Secțiunile care conțin cod executabil sunt numite secțiuni sau segmente de text. Există, de asemenea, segmente sau secțiuni de date care conțin informații sau date care nu se pot executa. Un alt tip de secțiune, denumit BSS. conține blocuri care încep cu date de caractere.

Înainte de fiecare ieșire de caractere de către comanda nm. valoarea corespunzătoare în format hexazecimal (implicit), precum și codul de caractere corespunzător tipului de caractere. Unele dintre cele mai comune coduri sunt: ​​A (valoare absolută) - valori care nu se vor modifica în timpul legăturilor ulterioare; B - simboluri din secțiunea BSS; C - simboluri comune care indică date neinitializate.

Fișierele obiect conțin mai multe părți diferite, împărțite în secțiuni. Secțiunile pot conține cod executabil, nume de caractere, valori de date inițializate și multe alte tipuri de date. Pentru mai multe informații despre aceste tipuri de date, consultați pagina mană a paginii de om UNIX pentru nm. unde fiecare tip este descris de valorile simbolice, care sunt extrase la ieșirea comenzii.

Detalii, detalii.

Chiar și un simplu program "Hello World", care ajunge la starea fișierului obiect, conține o gamă imensă de detalii. Programul nm este bun pentru afișarea unei liste de caractere, precum și a tipurilor și valorilor acestora, cu toate acestea, sunt necesare instrumente mai puternice pentru a studia mai detaliat conținutul secțiunilor de mai sus.

Două dintre aceste instrumente sunt recunoscute și recunoscute. Tastând următoarea comandă, veți vedea un ansamblu care enumeră fiecare secțiune a fișierului obiect care conține codul executabil. Este uimitor, nu-i asa, cat de mult codul genereaza de fapt compilatorul pentru un astfel de program mic?

Pentru programator, fascinat de detalii de programare la un nivel scăzut, acesta este un instrument excelent pentru studierea informațiilor de ieșire ale compilatoarelor și asamblorilor. Informațiile detaliate, precum cea prezentată în acest cod, indică foarte mult natura procesorului pe care rulează sistemul. Studiind aceste informații împreună cu documentația tehnologică furnizată de producătorul procesorului, puteți obține cunoștințe foarte valoroase despre modul în care funcționează totul, înțelegând informațiile de ieșire ale programelor care rulează.

Programul readelf poate de asemenea scoate conținutul fișierului obiect cu aceeași transparență. Puteți verifica acest lucru tastând următoarea comandă:

Această comandă generează datele afișate în listele 4. Antetul ELF oferă un rezumat al tuturor secțiunilor din fișier. Înainte de a afișa conținutul acestor antete, rețineți câte dintre ele. Aceste informații pot fi utile atunci când studiați fișiere cu obiecte mari.

După cum se poate observa din această listare, un simplu a.out fișier „Hello World“ program conține o multitudine de detalii utile - informații despre versiune, histograma, mai multe tabele de diferite tipuri de caractere, etc. Deja câteva instrumente prezentate aici sunt suficiente pentru a petrece mult timp învățând informații noi despre fișierele executabile prin studierea fișierelor de obiecte.

În plus față de toate aceste secțiuni, compilatorul poate pune informații de depanare în fișierul obiect și va fi, de asemenea, reflectat aici. Introduceți următoarea comandă și faceți ceva timp pentru a afla ce vă va spune compilatorul (ca și cum ați depanat):

Executabilele sunt și fișiere obiect

În lumea UNIX, fișierele executabile sunt fișiere obiect și le puteți studia exact așa cum ați făcut cu fișierul a.out. Un exercițiu foarte util este să mergeți în directorul / bin sau / local / bin și să aplicați nm. objdump și readelf la orice comenzi pe care le utilizați cel mai des, de exemplu, pwd. ps. cat sau rm. Deseori, atunci când scrieți programe care necesită caracteristicile care au fost puse în aplicare într-unul dintre instrumentele standard, este util pentru a vedea cum, de fapt, acest instrument funcționează prin aplicarea la aceasta objdump comanda -d .

Dacă doriți să lucrați cu compilatoare și alte instrumente lingvistice, vă va da seama că timpul petrecut pe studiul diferitelor fișiere obiect care alcătuiesc sistemul computerului, nu irosite. În sistemul de operare UNIX, există mai multe niveluri și straturi care instrumentele de examinare fișiere obiect sunt situate aproape de hardware-ul. Acest lucru vă permite să simțiți cu adevărat sistemul.

concluzie

Studierea fișierelor obiect poate aprofunda foarte mult cunoștințele dvs. despre sistemul de operare UNIX și vă permite să înțelegeți mai bine modul în care software-ul este de fapt generat de codul sursă. Vă sugerez să examineze producția instrumentelor descrise în acest articol, pentru programul de fișiere obiect situat în / bin sau / local / bin pe sistemul dumneavoastră și citiți documentația sistemului, furnizat de furnizor.

Descărcați resurse

Subiecte conexe

  • Articol original: Instrumente UNIX pentru explorarea fișierelor obiect
  • Formate de fișiere executabile. Pentru mai multe informații despre formatele de fișiere executabile, consultați Wikipedia.
  • Format de modul executabil și conectat (Executable and Linking Format, ELF). Pentru mai multe informații, vizitați Universitatea din California-Davis.
  • Articole despre AIX și UNIX. Găsiți alte articole de William Zimmerly. (RO)
  • Versiuni de evaluare ale software-ului IBM. Utilizați-vă în următorul proiect de dezvoltare, pe care îl puteți descărca direct de la dezvoltatorWorks.
  • Wiki pe AIX 5L. Un mediu de colaborare care conține informații tehnice referitoare la AIX.






Articole similare

Trimiteți-le prietenilor: