| OBJDUMP(1) | Instrumente pentru dezvoltare(programare) GNU | OBJDUMP(1) |
objdump - afișează informații din fișierele obiect
objdump [-a|--archive-headers]
[-b nume-bfd|--target=nume-bfd]
[-C|--demangle[=stil] ]
[-d|--disassemble[=simbol]]
[-D|--disassemble-all]
[-z|--disassemble-zeroes]
[-EB|-EL|--endian={big | little }]
[-f|--file-headers]
[-F|--file-offsets]
[--file-start-context]
[-g|--debugging]
[-e|--debugging-tags]
[-h|--section-headers|--headers]
[-i|--info]
[-j secțiunea|--section=secțiunea]
[-l|--line-numbers]
[-S|--source]
[--source-comment[=text]]
[-m mașina|--architecture=mașina]
[-M
opțiuni|--disassembler-options=opțiuni]
[-p|--private-headers]
[-P opțiuni|--private=opțiuni]
[-r|--reloc]
[-R|--dynamic-reloc]
[-s|--full-contents]
[-Z|--decompress]
[-W[lLiaprmfFsoORtUuTgAck]|
--dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=str-offsets,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index,=addr,=cu_index,=links]]
[-WK|--dwarf=follow-links]
[-WN|--dwarf=no-follow-links]
[-wD|--dwarf=use-debuginfod]
[-wE|--dwarf=do-not-use-debuginfod]
[-L|--process-links]
[--ctf=secțiunea]
[--sframe=secțiunea]
[-G|--stabs]
[-t|--syms]
[-T|--dynamic-syms]
[-x|--all-headers]
[-w|--wide]
[--start-address=adresa]
[--stop-address=adresa]
[--no-addresses]
[--prefix-addresses]
[--[no-]show-raw-insn]
[--adjust-vma=decalaj]
[--show-all-symbols]
[--dwarf-depth=n]
[--dwarf-start=n]
[--ctf-parent=secțiunea]
[--no-recurse-limit|--recurse-limit]
[--special-syms]
[--prefix=prefix]
[--prefix-strip=nivel]
[--insn-width=lățimea]
[--visualize-jumps[=color|=extended-color|=off]
[--disassembler-color=[off|terminal|on|extended]
[-U metoda] [--unicode=metoda]
[-V|--version]
[-H|--help]
fișier-obiect...
objdump afișează informații despre unul sau mai multe fișiere obiect. Opțiunile controlează ce informații specifice se afișează. Aceste informații sunt utile mai ales programatorilor care lucrează la instrumentele de compilare, spre deosebire de programatorii care doresc doar ca programul lor să fie compilat și să funcționeze.
fișier-obiect... sunt fișierele obiect care urmează să fie examinate. Atunci când specificați arhive, objdump afișează informații despre fiecare dintre fișierele obiect membre.
Formele lungă și scurtă ale opțiunilor, prezentate aici ca alternative, sunt echivalente. Cel puțin o opțiune din lista -a,-d,-D,-e,-f,-g,-G,-h,-H,-p,-P,-r,-R,-s,-S,-t,-T,-V,-x trebuie să fie dată.
De exemplu,
objdump -b oasys -m vax -h fu.o
afișează informații sumare din antetele secțiunilor (-h) din fu.o, care este identificat explicit (-m) ca fiind un fișier obiect VAX în formatul produs de compilatoarele Oasys. Puteți lista formatele disponibile cu opțiunea -i.
În mod implicit, această limită este activată, dar poate fi necesar să fie dezactivată pentru a dezmembra nume cu adevărat complicate. Rețineți totuși că, dacă limita de recursivitate este dezactivată, este posibilă epuizarea stivei și orice raport de eroare privind un astfel de eveniment va fi respins.
Rețineți că dacă opțiunea --dwarf=follow-links este activată, atunci orice tabele de simboluri din fișierele de informații de depanare legate vor fi citite și utilizate la dezasamblare.
Această opțiune are, de asemenea, un efect subtil asupra dezasamblării instrucțiunilor din secțiunile de cod. Atunci când opțiunea -d este în vigoare, objdump va presupune că orice simboluri prezente într-o secțiune de cod apar la limita dintre instrucțiuni și va refuza să dezasambleze peste o astfel de limită. Cu toate acestea, atunci când opțiunea -D este în vigoare, această presupunere este suprimată. Aceasta înseamnă că este posibil ca rezultatele -d și -D să difere dacă, de exemplu, datele sunt stocate în secțiunile de cod.
Dacă ținta este o arhitectură ARM, această opțiune are, de asemenea, efectul de a forța dezasamblatorul să decodifice bucăți de date găsite în secțiunile de cod ca și cum ar fi instrucțiuni.
Rețineți că dacă opțiunea --dwarf=follow-links este activată, atunci orice tabele de simboluri din fișierele de informații de depanare legate vor fi citite și utilizate la dezasamblare.
Segmentele de fișier pot fi realocate la adrese non-standard, de exemplu prin utilizarea opțiunilor -Ttext, -Tdata sau -Tbss la \fBld. Cu toate acestea, unele formate de fișiere obiect, cum ar fi a.out, nu stochează adresa de pornire a segmentelor de fișier. În aceste situații, deși ld realocă corect secțiunile, utilizarea objdump -h pentru a lista anteturile secțiunilor fișierului nu poate afișa adresele corecte. În schimb, se afișează adresele obișnuite, care sunt implicite pentru țintă.
Rețineți că, în unele cazuri, este posibil ca o secțiune să aibă atât atributul READONLY, cât și atributul NOREAD activate. În astfel de cazuri, atributul NOREAD are prioritate, dar objdump le va raporta pe ambele, deoarece așezarea exactă a biților de semnalizare poate fi importantă.
Pentru majoritatea arhitecturilor este posibil să se furnizeze un nume de arhitectură și un nume de mașină, separate prin două puncte. De exemplu, foo:bar s-ar referi la tipul de mașină bar în arhitectura foo. Acest lucru poate fi util dacă objdump a fost configurat pentru a permite mai multe arhitecturi.
Dacă ținta este o arhitectură ARM, atunci această opțiune are un efect suplimentar. Aceasta restricționează dezasamblarea doar la instrucțiunile acceptate de arhitectura specificată de mașina. Dacă este necesară utilizarea acestei opțiuni deoarece fișierul de intrare nu conține informații despre arhitectură, dar se dorește și dezasamblarea tuturor instrucțiunilor, utilizați -marm.
Pentru ARC, dsp controlează imprimarea instrucțiunilor DSP, spfp selectează imprimarea instrucțiunilor FPX de precizie unică FP, dpfp selectează imprimarea instrucțiunilor FPX de precizie dublă FP, quarkse_em selectează imprimarea instrucțiunilor speciale QuarkSE-EM, fpuda selectează imprimarea instrucțiunilor de asistență de precizie dublă, fpus selectează imprimarea instrucțiunilor FPU de precizie unică FP, în timp ce fpud selectează imprimarea instrucțiunilor FPU de precizie dublă FP. În plus, se poate opta pentru imprimarea tuturor imediatelor în hexazecimal utilizând hex. În mod implicit, valorile imediate scurte sunt imprimate utilizând reprezentarea zecimală, în timp ce valorile imediate lungi sunt imprimate în hexazecimal.
cpu=... permite aplicarea unui anumit ISA la dezasamblarea instrucțiunilor, înlocuind valoarea -m sau orice se află în fișierul ELF. Acest lucru ar putea fi util pentru a selecta ARC EM sau HS ISA, deoarece arhitectura este aceeași pentru acestea, iar dezasamblatorul se bazează pe datele private din antetul ELF pentru a decide dacă codul este pentru EM sau HS. Această opțiune poate fi specificată de mai multe ori - va fi utilizată doar ultima valoare. Valorile valabile sunt aceleași ca pentru opțiunea de asamblare -mcpu=....
Dacă ținta este o arhitectură ARM, această opțiune poate fi utilizată pentru a selecta setul de nume de registre care este utilizat în timpul dezasamblării. Specificarea -M reg-names-std (implicit) va selecta denumirile registrelor utilizate în documentația setului de instrucțiuni ARM, dar cu registrul 13 denumit „sp”, registrul 14 denumit „lr” și registrul 15 denumit „pc”. Specificarea -M reg-names-apcs va selecta setul de nume utilizat de standardul ARM Procedure Call Standard, în timp ce specificarea -M reg-names-raw va utiliza doar r urmat de numărul registrului.
Există, de asemenea, două variante ale schemei de denumire a registrelor APCS activate prin -M reg-names-atpcs și -M reg-names-special-atpcs care utilizează convențiile de denumire ARM/Thumb Procedure Call Standard; (fie cu denumirile registrelor normale, fie cu denumirile registrelor speciale).
Această opțiune poate fi, de asemenea, utilizată pentru arhitecturile ARM pentru a forța dezasamblatorul să interpreteze toate instrucțiunile ca instrucțiuni Thumb prin utilizarea opțiunii --disassembler-options=force-thumb. Acest lucru poate fi util atunci când încercați să dezasamblați codul thumb produs de alte compilatoare.
Pentru țintele AArch64, această opțiune poate fi utilizată pentru a stabili dacă instrucțiunile sunt dezasamblate ca cele mai generale instrucțiuni utilizând opțiunea -M no-aliases sau dacă notele de instrucțiuni ar trebui generate ca comentarii în dezasamblare utilizând opțiunea -M note.
Pentru x86, unele dintre opțiuni dublează funcțiile opțiunii -m, dar permit un control mai fin.
Pentru PowerPC, argumentul -M raw selectează dezasamblarea inserțiilor hardware și nu a pseudonimelor. De exemplu, veți vedea "rlwinm" în loc de "clrlwi", și "addi" în loc de "li". Toate argumentele -m pentru gas care selectează un CPU sunt acceptate. Acestea sunt: 403, 405, 440, 464, 476, 601, 603, 604, 620, 7400, 7410, 7450, 7455, 750cl, 821, 850, 860, a2, booke, booke32, cell, com, e200z2, e200z4, e300, e500, e500mc, e500mc64, e500x2, e5500, e6500, efs, power4, power5, power6, power7, power8, power9, power10, power11, ppc, ppc32, ppc64, ppc64bridge, ppcps, pwr, pwr2, pwr4, pwr5, pwr5x, pwr6, pwr7, pwr8, pwr9, pwr10, pwr11, pwrx, titan, vle și future. 32 și 64 modifică selecția CPU implicită sau una anterioară, dezactivând și, respectiv, activând instrucțiunile pe 64 de biți. În plus, altivec, any, lsp, htm, vsx, spe și spe2 adaugă capacități la o selecție CPU anterioară sau ulterioară. any va dezasambla orice cod op cunoscut de binutils, dar în cazurile în care un cod op are două semnificații diferite sau argumente diferite, este posibil să nu vedeți dezasamblarea așteptată. Dacă dezasamblați fără a oferi o selecție CPU, se va alege o valoare implicită din informațiile obținute de BFD din anteturile fișierelor obiect, dar rezultatul poate să nu fie cel așteptat.
Pentru MIPS, această opțiune controlează imprimarea numelor mnemonice ale instrucțiunilor și a numelor registrelor în instrucțiunile dezasamblate. Se pot specifica mai multe selecții din următoarele opțiuni ca șir separat prin virgule, iar opțiunile nevalide sunt ignorate:
Pentru oricare dintre opțiunile enumerate mai sus, ABI sau ARHITECTURA pot fi specificate ca numeric pentru a imprima numere în loc de nume, pentru tipurile de registre selectate. Puteți lista valorile disponibile ale ABI și ARHITECTURA folosind opțiunea --help.
Pentru VAX, puteți specifica adresele de intrare a funcției cu -M entry:0xf00ba. Puteți utiliza acest lucru de mai multe ori pentru a dezasambla corect fișierele binare VAX care nu conțin tabele de simboluri (cum ar fi descărcările ROM). În aceste cazuri, masca de intrare a funcției ar fi decodificată altfel ca instrucțiuni VAX, ceea ce ar duce probabil la dezasamblarea greșită a restului funcției.
Pentru XCOFF, opțiunile disponibile sunt:
Pentru PE, opțiunile disponibile sunt:
Nu toate formatele de obiecte acceptă această opțiune. În special formatul ELF nu o utilizează.
Dacă este necesar să dezactivați opțiunea visualize-jumps după ce aceasta a fost activată anterior, atunci utilizați visualize-jumps=off.
Argumentul on adaugă culori folosind culorile simple ale terminalului.
Argumentul terminal face același lucru, dar numai dacă dispozitivul de ieșire este un terminal.
Argumentul extended-color este similar cu argumentul on, dar utilizează culori pe 8 biți. Este posibil ca acestea să nu lucreze pe toate terminalele.
Argumentul off dezactivează dezasamblarea colorată.
În plus, atunci când se afișează atributele DWARF, în cazul în care se găsește un formular care face trimitere la un fișier de informații de depanare separat, atunci va fi afișat și conținutul la care se face referire.
Notă - în unele distribuții, această opțiune este activată în mod implicit. Ea poate fi dezactivată prin intermediul opțiunii de depanare N. Valoarea implicită poate fi aleasă la configurarea binutils prin intermediul opțiunilor --enable-follow-debug-links=yes sau --enable-follow-debug-links=no. Dacă acestea nu sunt utilizate, atunci opțiunea implicită este de a activa urmărirea legăturilor de depanare.
Notă - dacă suportul pentru protocolul debuginfod a fost activat atunci când binutils a fost construit, atunci această opțiune va include, de asemenea, o încercare de a contacta orice server debuginfod menționat în variabila de mediu DEBUGINFOD_URLS. Rezolvarea acestei probleme ar putea dura ceva timp. Acest comportament poate fi dezactivat prin intermediul opțiunii de depanare =do-not-use-debuginfod.
Notă: afișarea conținutului secțiunilor .debug_static_funcs, .debug_static_vars și debug_weaknames nu este acceptată în prezent.
Cu o valoare diferită de zero pentru n, nu se afișează DIE-uri la niveluri mai mari sau mai adânci decât n. Intervalul pentru n este bazat pe zero.
Dacă este specificată, această opțiune va suprima afișarea oricăror informații de antet și a tuturor DIE-urilor înainte de DIE numerotate n. Vor fi afișați numai frații și copiii DIE specificați.
Aceasta poate fi utilizată împreună cu --dwarf-depth.
În mod implicit, afișează numele secțiunii numite .ctf, care este numele emis de ld.
În mod implicit, se afișează numele secțiunii numite .sframe, care este numele emis de ld.
[ 4](sec 3)(fl 0x00)(ty 0)(scl 3) (nx 1) 0x00000000 .bss
[ 6](sec 1)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 fred
unde numărul din interiorul parantezelor drepte este numărul intrării din tabelul de simboluri, numărul sec este numărul secțiunii, valoarea fl sunt biții fanionului simbolului, numărul ty este tipul simbolului, numărul scl este clasa de stocare a simbolului și valoarea nx este numărul de intrări auxiliare asociate simbolului. Ultimele două câmpuri sunt valoarea simbolului și numele acestuia.
Celălalt format de ieșire comun, întâlnit de obicei cu fișierele bazate pe ELF, arată astfel:
00000000 l d .bss 00000000 .bss
00000000 g .text 00000000 fred
Aici, primul număr este valoarea simbolului (uneori denumită adresa acestuia). Următorul câmp este de fapt un set de caractere și spații care indică biții fanionului care sunt activați pe simbol. Aceste caractere sunt descrise mai jos. Urmează secțiunea cu care este asociat simbolul sau *ABS* dacă secțiunea este absolută (adică nu este legată de nicio secțiune), sau *UND* dacă secțiunea este menționată în fișierul care face obiectul descărcării, dar nu este definită acolo.
După numele secțiunii urmează un alt câmp, un număr, care pentru simbolurile comune este alinierea, iar pentru alte simboluri este dimensiunea. La sfârșit este afișat numele simbolului.
Caracterele fanionului sunt împărțite în 7 grupuri, după cum urmează:
Formatul de ieșire este similar cu cel produs de opțiunea --syms, cu excepția faptului că înainte de numele simbolului este inserat un câmp suplimentar, care oferă informații despre versiunea asociată simbolului. Dacă versiunea este versiunea implicită care urmează să fie utilizată la rezolvarea referințelor fără versiune „unversioned ” la simbol, atunci este afișată așa cum este, altfel este pusă între paranteze.
Opțiunea --unicode=escape le afișează ca secvențe de eludare (\uxxxx), iar opțiunea --unicode=highlight le afișează ca secvențe de eludare evidențiate cu roșu (dacă sunt acceptate de dispozitivul de ieșire). Culoarea are rolul de a atrage atenția asupra prezenței secvențelor unicode acolo unde nu ar fi de așteptat.
Opțiunile din fișier sunt separate prin spații albe. Un caracter de spațiere poate fi inclus într-o opțiune prin includerea întregii opțiuni între ghilimele simple sau duble. Orice caracter (inclusiv o bară oblică inversă) poate fi inclus prin prefixarea caracterului care urmează să fie inclus cu o bară oblică inversă. fișier poate conține la rândul său opțiuni @fișier suplimentare; orice astfel de opțiuni vor fi procesate în mod recursiv.
nm(1), readelf(1), and the Info entries for binutils.
Drepturi de autor © 1991-2025 Free Software Foundation, Inc.
Se acordă permisiunea de a copia, distribui și/sau modifica acest document în conformitate cu termenii Licenței GNU Free Documentation, versiunea 1.3 sau orice versiune ulterioară publicată de Free Software Foundation; fără secțiuni invariante, fără texte de copertă și fără texte de contra copertă. O copie a licenței este inclusă în secțiunea intitulată „GNU Free Documentation License”.
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.
| 3 martie 2025 | binutils-2.44 |