Scroll to navigation

OBJCOPY(1) Instrumente pentru dezvoltare(programare) GNU OBJCOPY(1)

NUME

objcopy - copiază și traduce fișiere obiect

SINOPSIS

objcopy [-F nume-bfd|--target=nume-bfd]
[-I nume-bfd|--input-target=nume-bfd]
[-O nume-bfd|--output-target=nume-bfd]
[-B arhitectura-bfd|--binary-architecture=arhitectura-bfd]
[-S|--strip-all]
[-g|--strip-debug]
[--strip-unneeded]
[-K nume-simbol|--keep-symbol=nume-simbol]
[--keep-file-symbols]
[--keep-section-symbols]
[-N nume-simbol|--strip-symbol=nume-simbol]
[--strip-unneeded-symbol=nume-simbol]
[-G nume-simbol|--keep-global-symbol=nume-simbol]
[--localize-hidden]
[-L nume-simbol|--localize-symbol=nume-simbol]
[--globalize-symbol=nume-simbol]
[--globalize-symbols=nume-fișier]
[-W nume-simbol|--weaken-symbol=nume-simbol]
[-w|--wildcard]
[-x|--discard-all]
[-X|--discard-locals]
[-b octet|--byte=octet]
[-i [întindere]|--interleave[=întindere]]
[--interleave-width=lățime]
[-j model-secțiune|--only-section=model-secțiune]
[-R model-secțiune|--remove-section=model-secțiune]
[--keep-section=model-secțiune]
[--remove-relocations=model-secțiune]
[--strip-section-headers]
[-p|--preserve-dates]
[-D|--enable-deterministic-archives]
[-U|--disable-deterministic-archives]
[--debugging]
[--gap-fill=valoare]
[--pad-to=adresa]
[--set-start=valoare]
[--adjust-start=increment]
[--change-addresses=increment]
[--change-section-address model-secțiune{=,+,-}valoare]
[--change-section-lma model-secțiune{=,+,-}valoare]
[--change-section-vma model-secțiune{=,+,-}valoare]
[--change-warnings] [--no-change-warnings]
[--set-section-flags model-secțiune=fanioane]
[--set-section-alignment model-secțiune=alinierea]
[--add-section sectionname=nume-fișier]
[--dump-section sectionname=nume-fișier]
[--update-section sectionname=nume-fișier]
[--rename-section nume-vechi=nume-nou[,fanioane]]
[--long-section-names {enable,disable,keep}]
[--change-leading-char] [--remove-leading-char]
[--reverse-bytes=număr]
[--srec-len=valoare] [--srec-forceS3]
[--redefine-sym vechi=nou]
[--redefine-syms=nume-fișier]
[--weaken]
[--keep-symbols=nume-fișier]
[--strip-symbols=nume-fișier]
[--strip-unneeded-symbols=nume-fișier]
[--keep-global-symbols=nume-fișier]
[--localize-symbols=nume-fișier]
[--weaken-symbols=nume-fișier]
[--add-symbol nume=[secțiune:]valoare[,fanioane]]
[--alt-machine-code=indice]
[--prefix-symbols=șir]
[--prefix-sections=șir]
[--prefix-alloc-sections=șir]
[--add-gnu-debuglink=ruta-către-fișier]
[--only-keep-debug]
[--strip-dwo]
[--extract-dwo]
[--extract-symbol]
[--writable-text]
[--readonly-text]
[--pure]
[--impure]
[--file-alignment=număr]
[--heap=rezervă[,angajată]]
[--image-base=adresa]
[--section-alignment=număr]
[--stack=rezervă[,angajată]]
[--subsystem=care:major.minor]
[--compress-debug-sections]
[--decompress-debug-sections]
[--elf-stt-common=valoare]
[--merge-notes]
[--no-merge-notes]
[--verilog-data-width=valoare]
[-v|--verbose]
[-V|--version]
[--help] [--info]
fișier-intrare [fișier-ieșire]

DESCRIERE

Instrumentul GNU objcopy copiază conținutul unui fișier obiect în altul. objcopy utilizează biblioteca GNU BFD pentru citirea și scrierea fișierelor obiect. Acesta poate scrie fișierul obiect de destinație într-un format diferit de cel al fișierului obiect sursă. Comportamentul exact al objcopy este controlat de opțiunile din linia de comandă. Rețineți că objcopy ar trebui să fie capabil să copieze un fișier complet legat între oricare două formate. Cu toate acestea, copierea unui fișier obiect realocabil între oricare două formate poate să nu funcționeze conform așteptărilor.

objcopy creează fișiere temporare pentru efectuarea conversiilor și le șterge după aceea. objcopy utilizează BFD pentru a-și efectua toate conversiile; are acces la toate formatele descrise în BFD și, prin urmare, este capabil să recunoască majoritatea formatelor fără a i se spune explicit.

objcopy poate fi utilizat pentru a genera S-records utilizând o țintă de ieșire srec (de exemplu, utilizați -O srec).

objcopy poate fi utilizat pentru a genera un fișier binar brut utilizând o țintă de ieșire binary (de exemplu, utilizați -O binary). Atunci când objcopy generează un fișier binar brut, acesta va produce în esență o descărcare din memorie a conținutului fișierului obiect de intrare. Toate simbolurile și informațiile de relocare vor fi eliminate. Descărcarea din memorie va începe la adresa de încărcare a celei mai mici secțiuni copiate în fișierul de ieșire.

La generarea unei înregistrări S sau a unui fișier binar brut, poate fi util să se utilizeze -S pentru a elimina secțiunile care conțin informații de depanare. În unele cazuri, -R va fi util pentru a elimina secțiunile care conțin informații care nu sunt necesare pentru fișierul binar.

Notă---objcopy nu este capabil să schimbe endianness-ul fișierelor sale de intrare. Dacă formatul de intrare are un endianness (unele formate nu au), objcopy poate copia intrările numai în formate de fișiere care au același endianness sau care nu au endianness (de exemplu, srec). (Cu toate acestea, a se vedea opțiunea --reverse-bytes).

OPȚIUNI

Fișierele de intrare și, respectiv, de ieșire. Dacă nu specificați fișier-ieșire, objcopy creează un fișier temporar și redenumește distructiv rezultatul cu numele fișier-intrare.
Consideră că formatul obiect al fișierului sursă este nume-bfd, în loc să încerce să îl deducă.
Scrie fișierul de ieșire utilizând formatul obiectului nume-bfd.
Utilizează nume-bfd ca format obiect atât pentru fișierul de intrare, cât și pentru cel de ieșire; de exemplu, transferă pur și simplu datele de la sursă la destinație fără transformare.
Util în cazul transformării unui fișier de intrare fără arhitectură într-un fișier obiect. În acest caz, arhitectura de ieșire poate fi stabilită la arhitectura-bfd. Această opțiune va fi ignorată dacă fișierul de intrare are o arhitectură-bfd cunoscută. Puteți accesa aceste date binare în interiorul unui program făcând referire la simbolurile speciale care sunt create de procesul de conversie. Aceste simboluri se numesc _binary_fișier-obiect_start, _binary_fișier-obiect_end și _binary_fișier-obiect_size. de exemplu, puteți transforma un fișier imagine într-un fișier obiect și apoi îl puteți accesa în codul dvs. utilizând aceste simboluri.
Copiază numai secțiunile indicate din fișierul de intrare în fișierul de ieșire. Această opțiune poate fi dată de mai multe ori. Rețineți că utilizarea necorespunzătoare a acestei opțiuni poate face inutilizabil fișierul de ieșire. Caracterele joker sunt acceptate în model-secțiune.

Dacă primul caracter din model-secțiune este semnul exclamării (!), atunci secțiunile corespunzătoare nu vor fi copiate, chiar dacă utilizarea anterioară a lui --only-section pe aceeași linie de comandă le-ar fi copiat. De exemplu:

          --only-section=.text.* --only-section=!.text.foo
    

va copia toate secțiunile care se potrivesc cu „text.*”, dar nu și secțiunea „text.foo”.

Elimină orice secțiune care corespunde model-secțiune din fișierul de ieșire. Această opțiune poate fi dată de mai multe ori. Rețineți că utilizarea necorespunzătoare a acestei opțiuni poate face inutilizabil fișierul de ieșire. Caracterele joker sunt acceptate în model-secțiune. Utilizarea simultană a opțiunilor -j și -R duce la un comportament nedefinit.

Dacă primul caracter din model-secțiune este semnul exclamării (!), atunci secțiunile corespunzătoare nu vor fi eliminate chiar dacă o utilizare anterioară a --remove-section pe aceeași linie de comandă ar fi eliminat-o în caz contrar. De exemplu:

          --remove-section=.text.* --remove-section=!.text.foo
    

va elimina toate secțiunile care corespund modelului ".text.*", dar nu va elimina secțiunea ".text.foo"

Atunci când se elimină secțiuni din fișierul de ieșire, păstrează secțiunile care se potrivesc cu model-secțiune.
Elimină realocările non-dinamice din fișierul de ieșire pentru orice secțiune care corespunde model-secțiune. Această opțiune poate fi dată de mai multe ori. Rețineți că utilizarea necorespunzătoare a acestei opțiuni poate face fișierul de ieșire inutilizabil, iar încercarea de a elimina o secțiune de realocare dinamică precum .rela.plt dintr-un executabil sau bibliotecă partajată cu --remove-relocations=.plt nu va funcționa. Caracterele joker sunt acceptate în model-secțiune. De exemplu:

          --remove-relocations=.text.*
    

va elimina realocările pentru toate secțiunile care corespund modelului „&.text.*”.

Dacă primul caracter din model-secțiune este semnul exclamării (!), atunci secțiunile care se potrivesc nu vor avea realocările eliminate, chiar dacă o utilizare anterioară a --remove-relocations pe aceeași linie de comandă ar fi determinat altfel eliminarea realocărilor. De exemplu:

          --remove-relocations=.text.* --remove-relocations=!.text.foo
    

va elimina toate realocările pentru secțiunile care corespund modelului '.text.*', dar nu va elimina realocările pentru secțiunea '.text.foo'.

Elimină antetul secțiunii. Această opțiune este specifică fișierelor ELF. Implică --strip-all și --merge-notes.
Nu copiază informațiile privind realocarea și simbolurile din fișierul sursă. De asemenea, șterge secțiunile de depanare.
Nu copiază simboluri sau secțiuni de depanare din fișierul sursă.
Elimină toate simbolurile care nu sunt necesare pentru procesarea realocării, în plus față de simbolurile de depanare și secțiunile eliminate de --strip-debug.
La eliminarea simbolurilor, păstrează simbolul nume-simbol chiar dacă în mod normal ar fi eliminat. Această opțiune poate fi dată de mai multe ori.
Nu copiază simbolul nume-simbol din fișierul sursă. Această opțiune poate fi dată de mai multe ori.
Nu copiază simbolul nume-simbol din fișierul sursă decât dacă este necesar pentru o realocare. Această opțiune poate fi dată de mai multe ori.
Menține doar simbolul simbolname global. Face toate celelalte simboluri locale pentru fișier, astfel încât acestea să nu fie vizibile din exterior. Această opțiune poate fi dată de mai multe ori. Notă: această opțiune nu poate fi utilizată împreună cu opțiunile --globalize-symbol sau --globalize-symbols.
Într-un obiect ELF, marchează toate simbolurile care au vizibilitate ascunsă sau internă ca fiind locale. Această opțiune se aplică în plus față de opțiunile de localizare specifice simbolurilor, cum ar fi -L.
Convertește un simbol global sau slab numit nume-simbol într-un simbol local, astfel încât acesta să nu fie vizibil din exterior. Această opțiune poate fi dată de mai multe ori Notă - simbolurile unice nu sunt convertite.
Face simbolul nume-simbol slab. Această opțiune poate fi dată de mai multe ori.
Oferă simbolului nume-simbol domeniul de aplicare global, astfel încât acesta să fie vizibil în afara fișierului în care este definit. Această opțiune poate fi dată de mai multe ori. Notă: această opțiune nu poate fi utilizată împreună cu opțiunile -G sau --keep-global-symbol.
Permite expresii regulate în nume-simbols utilizate în alte opțiuni din linia de comandă. Operatorii semn de întrebare (?), asterisc (*), bara oblică inversă (\) și parantezele drepte ([]) pot fi utilizate oriunde în numele simbolului. Dacă primul caracter din numele simbolului este semnul exclamării (!), atunci sensul opțiunii este inversat pentru acel simbol. De exemplu:

          -w -W !foo -W fo*
    

va determina objcopy să slăbească toate simbolurile care încep cu „fo”, cu excepția simbolului „foo”.

Nu copiază simbolurile non-globale din fișierul sursă.
Nu copiază simbolurile locale generate de compilator. (Acestea încep de obicei cu L sau ..)
Dacă intercalarea a fost activată prin opțiunea --interleave, atunci începe intervalul de octeți de păstrat de la octetul octet. octet poate fi cuprins între 0 și întindere-1, unde întindere este valoarea dată de opțiunea --interleave.
Copiază doar un interval din fiecare întindere octeți. (Datele de antet nu sunt afectate). Selectează octetul din interval care începe copierea cu opțiunea --byte. Selectează lățimea intervalului cu opțiunea --interleave-width.

Această opțiune este utilă pentru crearea de fișiere pentru programul ROM. Este utilizată de obicei cu o țintă de ieșire "srec". Rețineți că objcopy se va plânge dacă nu specificați și opțiunea --byte.

Întinderea implicită de intercalare este de 4, deci cu --byte stabilită la 0, objcopy ar copia primul octet din fiecare patru octeți de la intrare, la ieșire.

Atunci când se utilizează cu opțiunea --interleave, se copiază lățime octeți la un moment dat. Începutul intervalului de octeți de copiat este stabilit de opțiunea --byte, iar întinderea intervalului este stabilită cu opțiunea --interleave.

Valoarea implicită pentru această opțiune este 1. Valoarea lățime plus valoarea octet stabilită prin opțiunea --octet nu trebuie să depășească întinderea de intercalare stabilită prin opțiunea --interleave.

Această opțiune poate fi utilizată pentru a crea imagini pentru două clișee de 16 biți intercalate într--o magistrală de 32 de biți trecând -b 0 -i 4 --interleave-width=2 și -b 2 -i 4 --interleave-width=2 la două comenzi objcopy. Dacă intrarea a fost „12345678”, atunci ieșirile vor fi „1256” și, respectiv, „3478”.

Stabilește ca datele de acces și de modificare ale fișierului de ieșire să fie aceleași cu cele ale fișierului de intrare.

Această opțiune copiază, de asemenea, data stocată în antetul unui fișier format PE, cu excepția cazului în care este definită variabila de mediu SOURCE_DATE_EPOCH. Dacă este definită, atunci această variabilă va fi utilizată ca dată stocată în antet, interpretată ca număr de secunde de la epoca Unix.

Funcționează în modul determinist. La copierea membrilor arhivei și la scrierea indexului arhivei, se utilizează zero pentru UID-uri, GID-uri, marcaje de timp și se utilizează moduri de fișier coerente pentru toate fișierele.

Dacă binutils a fost configurat cu --enable-deterministic-archives, atunci acest mod este activat în mod implicit. Acesta poate fi dezactivat cu opțiunea -U, de mai jos.

Nu funcționează în modul determinist. Aceasta este inversa opțiunii -D, de mai sus: atunci când copiază membrii arhivei și scrie indexul arhivei, utilizează valorile lor reale UID, GID, marcaj de timp și modul de fișier.

Aceasta este valoarea implicită, cu excepția cazului în care binutils a fost configurat cu --enable-deterministic-archives.

Convertește informațiile de depanare, dacă este posibil. Aceasta nu este opțiunea implicită, deoarece sunt acceptate numai anumite formate de depanare, iar procesul de conversie poate dura mult.
Umple golurile dintre secțiuni cu valoare. Această operație se aplică la adresa de încărcare (LMA) a secțiunilor. Se realizează prin creșterea dimensiunii secțiunii cu adresa inferioară și umplerea spațiului suplimentar creat cu valoare.
Completează fișierul de ieșire până la adresa de încărcare adresa. Acest lucru se realizează prin creșterea dimensiunii ultimei secțiuni. Spațiul suplimentar este umplut cu valoarea specificată de --gap-fill (implicit zero).
Stabilește adresa de început (cunoscută și ca adresa de intrare) a noului fișier la valoare. Nu toate formatele de fișiere obiect acceptă definirea adresei de început.
Schimbă adresa de pornire (cunoscută și ca adresa de intrare) prin adăugarea increment. Nu toate formatele de fișiere obiect acceptă definirea adresei de început.
Schimbă adresele VMA și LMA ale tuturor secțiunilor, precum și adresa de început, adăugând increment. Unele formate de fișiere obiect nu permit schimbarea arbitrară a adreselor secțiunilor. Rețineți că această opțiune nu realocă secțiunile; dacă programul se așteaptă ca secțiunile să fie încărcate la o anumită adresă, iar această opțiune este utilizată pentru a schimba secțiunile astfel încât acestea să fie încărcate la o adresă diferită, programul poate eșua.
Stabilește sau modifică atât adresa VMA, cât și adresa LMA a oricărei secțiuni care corespunde model-secțiune. Dacă se utilizează =, adresa secțiunii este stabilită la valoare. În caz contrar, valoare este adăugată sau scăzută din adresa secțiunii. A se vedea comentariile de la --change-addresses, de mai sus. Dacă model-secțiune nu se potrivește cu nicio secțiune din fișierul de intrare, va fi emis un avertisment, cu excepția cazului în care se utilizează opțiunea --no-change-warnings.
Stabilește sau modifică adresa LMA a oricărei secțiuni care corespunde model-secțiune. Adresa LMA este adresa la care secțiunea va fi încărcată în memorie în momentul încărcării programului. În mod normal, aceasta este aceeași cu adresa VMA, care este adresa secțiunii la momentul rulării programului, dar pe unele sisteme, în special pe cele în care programul este păstrat în ROM, cele două pot fi diferite. Dacă se utilizează =, adresa secțiunii este stabilită la valoare. În caz contrar, valoarea este adăugată sau scăzută din adresa secțiunii. A se vedea comentariile de la --change-addresses, de mai sus. Dacă model-secțiune nu se potrivește cu nicio secțiune din fișierul de intrare, va fi emis un avertisment, cu excepția cazului în care se utilizează opțiunea --no-change-warnings.
Definește sau modifică adresa VMA a oricărei secțiuni care corespunde model-secțiune. Adresa VMA este adresa la care va fi localizată secțiunea odată ce programul a început execuția. În mod normal, aceasta este aceeași cu adresa LMA, care este adresa la care secțiunea va fi încărcată în memorie, dar pe unele sisteme, în special pe cele în care un program este păstrat în ROM, cele două pot fi diferite. Dacă se utilizează =, adresa secțiunii este stabilită la valoare. În caz contrar, valoare este adăugată sau scăzută din adresa secțiunii. A se vedea comentariile de la opțiunea --change-addresses, de mai sus. Dacă model-secțiune nu se potrivește cu nicio secțiune din fișierul de intrare, va fi emis un avertisment, cu excepția cazului în care se utilizează opțiunea --no-change-warnings.

Notă - modificarea VMA a secțiunilor într-un binar complet legat poate fi periculoasă, deoarece poate exista cod care se așteaptă ca secțiunile să fie localizate la vechea lor adresă.

Dacă se utilizează --change-section-address sau --change-section-lma sau --change-section-vma, iar modelul de secțiune nu corespunde niciunei secțiuni, se emite un avertisment. Aceasta este valoarea implicită.
Nu emite un avertisment dacă se utilizează --change-section-address sau --adjust-section-lma sau --adjust-section-vma, chiar dacă modelul de secțiune nu corespunde niciunei secțiuni.
Stabilește fanioanele pentru toate secțiunile care se potrivesc cu model-secțiune. Argumentul fanioane este un șir de nume de fanioane separate prin virgule. Numele recunoscute sunt alloc, contents, load, noload, readonly, code, data, rom, exclude, share, debug și large. Puteți defini fanionul contents pentru o secțiune care nu are conținut, dar nu are sens să ștergeți fanionul contents al unei secțiuni care are conținut - eliminați secțiunea în schimb. Nu toate fanioanele sunt semnificative pentru toate formatele de fișiere obiect. În special, fanionul share este valabil numai pentru fișierele în format COFF și nu pentru fișierele în format ELF. Fanionul specific ELF x86-64 large corespunde cu SHF_X86_64_LARGE.
Stabilește alinierea pentru toate secțiunile care corespund model-secțiune. alinierea specifică alinierea în octeți și trebuie să fie o putere de doi, adică 1, 2, 4, 8....

Notă - definirea alinierii unei secțiuni nu va alinia automat adresele sale LMA sau VMA. Dacă și acestea trebuie modificate, atunci trebuie utilizate opțiunile --change-section-lma și/sau --change-section-vma. De asemenea, rețineți că schimbarea VMA poate cauza probleme în binarele complet legate, unde poate exista cod care se așteaptă ca conținutul secțiunilor să fie localizat la vechea lor adresă.

Adaugă o nouă secțiune numită nume-secțiune în timp ce copiază fișierul. Conținutul noii secțiuni este preluat din fișierul nume-fișier. Dimensiunea secțiunii va fi egală cu dimensiunea fișierului. Această opțiune funcționează numai pe formate de fișier care pot suporta secțiuni cu nume arbitrare. Notă - este posibil să fie necesară utilizarea opțiunii --set-section-flags pentru a defini atributele secțiunii nou create.
Plasează conținutul secțiunii numite nume-secțiune în fișierul nume-fișier, suprascriind orice conținut care ar fi putut fi acolo anterior. Această opțiune este inversă față de --add-section. Această opțiune este similară opțiunii --only-section, cu excepția faptului că nu creează un fișier formatat, ci doar descarcă conținutul ca date binare brute, fără a aplica nicio realocare. Opțiunea poate fi specificată de mai multe ori.
Înlocuiește conținutul existent al unei secțiuni numită nume-secțiune cu conținutul fișierului nume-fișier. Dimensiunea secțiunii va fi ajustată la dimensiunea fișierului. Fanioanele secțiunii pentru nume-secțiune vor rămâne neschimbate. Pentru fișierele în format ELF, corespondența dintre secțiune și segment va rămâne, de asemenea, neschimbată, ceea ce nu este posibil folosind --remove-section urmată de --add-section. Opțiunea poate fi specificată de mai multe ori.

Notă - este posibil să utilizați --rename-section și --update-section pentru a actualiza și redenumi o secțiune de pe aceeași linie de comandă. În acest caz, treceți numele original al secțiunii la --update-section, iar numele original și cel nou al secțiunii la --rename-section.

Adaugă un nou simbol numit nume în timpul copierii fișierului. Această opțiune poate fi specificată de mai multe ori. Dacă se indică secțiunea, simbolul va fi asociat cu secțiunea respectivă și va fi relativ la aceasta, altfel va fi un simbol ABS. Specificarea unei secțiuni nedefinite va duc la o eroare fatală. Nu există nicio verificare a valorii, aceasta va fi luată așa cum a fost specificată. Se pot specifica fanioane de simbol și nu toate fanioanele vor fi semnificative pentru toate formatele de fișiere obiect. În mod implicit, simbolul va fi global. Fanionul special „before=alt-simbol” va introduce noul simbol în fața simbolului alt-simbol specificat, în caz contrar simbolul (simbolurile) vor fi adăugate la sfârșitul tabelului de simboluri în ordinea în care apar.
Redenumește o secțiune din nume-vechi în nume-nou, schimbând opțional fanioanele secțiunii în fanioane în acest proces. Această opțiune are avantajul că, față de utilizarea unui script editor de legături pentru a efectua redenumirea, rezultatul rămâne un fișier obiect și nu devine un executabil legat. Această opțiune acceptă același set de fanioane ca și opțiunea --set-section-flags.

Această opțiune este deosebit de utilă atunci când formatul de intrare este binar, deoarece aceasta va crea întotdeauna o secțiune numită .data. Dacă, de exemplu, doriți în schimb să creați o secțiune numită .rodata care să conțină date binare, puteți utiliza următoarea linie de comandă pentru a realiza acest lucru:

          objcopy -I binary -O <format_ieșire> -B <arhitectura> \
           --rename-section .data=.rodata,alloc,load,readonly,data,contents \
           <fișier_binar_intrare> <output_object_filefișier_obiect_ieșire
    
Controlează gestionarea numelor lungi de secțiuni la prelucrarea formatelor de obiect "COFF" și "PE-COFF". Comportamentul implicit, keep, este de a păstra numele secțiunilor lungi dacă acestea sunt prezente în fișierul de intrare. Opțiunile enable și disable activează sau dezactivează forțat utilizarea numelor lungi de secțiuni în obiectul de ieșire; atunci când disable este în vigoare, orice nume lungi de secțiuni din obiectul de intrare vor fi trunchiate. Opțiunea enable va emite nume lungi de secțiuni numai dacă acestea sunt prezente în datele de intrare; aceasta este în mare parte aceeași cu opțiunea keep, dar nu este definit dacă opțiunea enable ar putea forța crearea unui tabel de șiruri gol în fișierul de ieșire.
Unele formate de fișiere obiect utilizează caractere speciale la începutul simbolurilor. Cel mai comun astfel de caracter este liniuța de subliniere, pe care compilatoarele o adaugă adesea înaintea fiecărui simbol. Această opțiune îi indică lui objcopy să schimbe caracterul de început al fiecărui simbol atunci când convertește între formate de fișiere obiect. Dacă formatele fișierelor de obiecte utilizează același caracter inițial, această opțiune nu are niciun efect. În caz contrar, aceasta va adăuga un caracter, va elimina un caracter sau va modifica un caracter, după caz.
Dacă primul caracter al unui simbol global este un caracter special de precedare a simbolului utilizat de formatul fișierului obiect, elimină caracterul. Cel mai frecvent caracter de precedare a simbolului este liniuța de subliniere. Această opțiune va elimina liniuța de subliniere de la toate simbolurile globale. Această opțiune poate fi utilă dacă doriți să legați între ele obiecte din diferite formate de fișier cu convenții diferite pentru numele simbolurilor. Această opțiune este diferită de --change-leading-char deoarece schimbă întotdeauna numele simbolului atunci când este cazul, indiferent de formatul fișierului obiect al fișierului de ieșire.
Inversează octeții dintr-o secțiune cu conținutul de ieșire. Lungimea unei secțiuni trebuie să fie divizibilă în mod egal cu valoarea dată pentru a putea avea loc inversarea. Inversarea are loc înainte de efectuarea intercalării.

Această opțiune este utilizată de obicei în generarea imaginilor ROM pentru sistemele țintă problematice. De exemplu, pe unele plăci țintă, cuvintele pe 32 de biți preluate din ROM-urile pe 8 biți sunt reasamblate în ordinea octeților little-endian, indiferent de ordinea octeților CPU-ului. În funcție de modelul de programare, este posibil să fie necesară modificarea endianness-ului ROM-ului.

Luați în considerare un fișier simplu cu o secțiune care conține următorii opt octeți: 12345678.

Folosind --reverse-bytes=2 pentru exemplul de mai sus, octeții din fișierul de ieșire vor fi ordonați 21436587.

Folosind --reverse-bytes=4 pentru exemplul de mai sus, octeții din fișierul de ieșire vor fi ordonați 43218765.

Prin folosirea --reverse-bytes=2 pentru exemplul de mai sus, urmat de --reverse-bytes=4 pe fișierul de ieșire, octeții din al doilea fișier de ieșire vor fi ordonați 34127856.

Semnificativă numai pentru ieșirea srec. Stabilește lungimea maximă a înregistrărilor Srecord produse la valoare. Această lungime acoperă atât adresa, cât și câmpurile de date și crc.
Semnificativă numai pentru ieșirea srec. Evită generarea înregistrărilor S1/S2, creând un format de înregistrare exclusiv S3.
Schimbă numele unui simbol vechi, în nou. Acest lucru poate fi util atunci când încercați să legați împreună două lucruri pentru care nu aveți nicio sursă și există coliziuni de nume.
Aplică --redefine-sym fiecărei perechi de simboluri „vechi nou” enumerate în fișierul nume-fișier. nume-fișier este pur și simplu un fișier plan, cu o pereche de simboluri pe linie. Comentariile de linie pot fi introduse prin caracterul hash. Această opțiune poate fi dată de mai multe ori.
Schimbă toate simbolurile globale din fișier pentru a fi slabe. Acest lucru poate fi util atunci când se construiește un obiect care va fi legat cu alte obiecte utilizând opțiunea -R a editorului de legături. Această opțiune este eficientă numai atunci când se utilizează un format de fișier obiect care acceptă simboluri slabe.
Aplică opțiunea --keep-symbol pentru fiecare simbol listat în fișierul nume-fișier. nume-fișier este pur și simplu un fișier plan, cu un nume de simbol pe linie. Comentariile de linie pot fi introduse prin caracterul hash. Această opțiune poate fi dată de mai multe ori.
Aplică opțiunea --strip-symbol fiecărui simbol listat în fișierul nume-fișier. nume-fișier este pur și simplu un fișier plan, cu un nume de simbol pe linie. Comentariile de linie pot fi introduse prin caracterul hash. Această opțiune poate fi dată de mai multe ori.
Aplică opțiunea --strip-unneeded-symbol pentru fiecare simbol listat în fișierul nume-fișier. nume-fișier este pur și simplu un fișier plan, cu un nume de simbol pe linie. Comentariile de linie pot fi introduse prin caracterul hash. Această opțiune poate fi dată de mai multe ori.
Aplică opțiunea --keep-global-symbol pentru fiecare simbol listat în fișierul nume-fișier. nume-fișier este pur și simplu un fișier plan, cu un nume de simbol pe linie. Comentariile de linie pot fi introduse prin caracterul hash. Această opțiune poate fi dată de mai multe ori.
Aplică opțiunea --localize-symbol pentru fiecare simbol listat în fișierul nume-fișier. nume-fișier este pur și simplu un fișier plan, cu un nume de simbol pe linie. Comentariile de linie pot fi introduse prin caracterul hash. Această opțiune poate fi dată de mai multe ori.
Aplică opțiunea --globalize--symbol pentru fiecare simbol listat în fișierul nume-fișier. nume-fișier este pur și simplu un fișier plan, cu un nume de simbol pe linie. Comentariile de linie pot fi introduse prin caracterul hash. Această opțiune poate fi dată de mai multe ori. Notă: această opțiune nu poate fi utilizată împreună cu opțiunile -G sau --keep-global-symbol.
Aplică opțiunea --weaken-symbol pentru fiecare simbol listat în fișierul nume-fișier. nume-fișier este pur și simplu un fișier plan, cu un nume de simbol pe linie. Comentariile de linie pot fi introduse prin caracterul hash. Această opțiune poate fi dată de mai multe ori.
Dacă arhitectura de ieșire are coduri de mașină alternative, utilizează al indicelea cod în locul celui implicit. Acest lucru este util în cazul în care unei mașini i se atribuie un cod oficial și lanțul de instrumente adoptă noul cod, dar alte aplicații depind în continuare de utilizarea codului original. Pentru arhitecturile bazate pe ELF, dacă alternativa indice nu există, atunci valoarea este tratată ca un număr absolut care trebuie stocat în câmpul e_machine din antetul ELF.
Marchează textul de ieșire ca fiind inscriptibil. Această opțiune nu este semnificativă pentru toate formatele de fișiere obiect.
Marchează textul de ieșire ca fiind protejat la scriere. Această opțiune nu este semnificativă pentru toate formatele de fișiere obiect.
Marchează fișierul de ieșire ca fiind paginat la cerere. Această opțiune nu este semnificativă pentru toate formatele de fișiere obiect.
Marchează fișierul de ieșire ca fiind impur. Această opțiune nu este semnificativă pentru toate formatele de fișiere obiect.
Prefixează toate simbolurile din fișierul de ieșire cu șir.
Prefixează toate numele secțiunilor din fișierul de ieșire cu șir.
Prefixează toate numele tuturor secțiunilor alocate din fișierul de ieșire cu șir.
Creează o secțiune .gnu_debuglink care conține o referință la ruta-către-fișier și o adaugă la fișierul de ieșire. Notă: fișierul de la ruta-către-fișier trebuie să existe. O parte a procesului de adăugare a secțiunii .gnu_debuglink implică încorporarea în secțiune a unei sume de control a conținutului fișierului de informații de depanare.

Dacă fișierul de informații de depanare este creat într-o locație, dar urmează să fie instalat ulterior într-o locație diferită, atunci nu utilizați ruta către locația instalată. Opțiunea --add-gnu-debuglink va eșua deoarece fișierul instalat nu există încă. În schimb, puneți fișierul de informații de depanare în directorul curent și utilizați opțiunea --add-gnu-debuglink fără nicio componentă de director, astfel:

         objcopy --add-gnu-debuglink=foo.debug
    

În momentul depanării, depanatorul va încerca să caute fișierul de informații de depanare separat într-un set de locații cunoscute. Setul exact al acestor locații variază în funcție de distribuția utilizată, dar de obicei include:

"* The same directory as the executable."
"* A sub-directory of the directory containing the executable"
numit .debug
"* A global debug directory such as /usr/lib/debug."

Atâta timp cât fișierul cu informații de depanare a fost instalat într-una dintre aceste locații înainte de rularea depanatorului, totul ar trebui să funcționeze corect.

Atunci când se elimină un fișier, poate cu --strip-debug sau --strip-unneeded, păstrează toate simbolurile care specifică nume de secțiuni, care altfel ar fi eliminate.
Atunci când se elimină un fișier, poate cu --strip-debug sau --strip-unneeded, păstrează toate simbolurile care specifică nume de fișiere sursă, care altfel ar fi eliminate.
Curăță un fișier, eliminând conținutul oricărei secțiuni care nu ar fi eliminată de --strip-debug și lăsând secțiunile de depanare intacte. În fișierele ELF, acest lucru păstrează toate secțiunile de note în ieșire.

Notă - antetele secțiunilor eliminate sunt păstrate, inclusiv dimensiunile lor, dar conținutul secțiunii este eliminat. Antetele secțiunilor sunt păstrate pentru ca alte instrumente să poată compara fișierul de depanare cu executabilul real, chiar dacă acesta a fost realocat într-un spațiu de adrese diferit.

Intenția este ca această opțiune să fie utilizată împreună cu --add-gnu-debuglink pentru a crea un executabil din două părți. Unul este un fișier binar curățat, care va ocupa mai puțin spațiu în RAM și în distribuție, iar al doilea este un fișier de informații de depanare, care este necesar doar dacă sunt necesare abilități de depanare. Procedura sugerată pentru a crea aceste fișiere este următoarea:

1.<Leagă executabilul în mod normal. Presupunând că acesta este numit >
"foo" apoi...
1.<Run "objcopy --only-keep-debug foo foo.dbg" to>
creează un fișier care conține informații de depanare.
1.<Run "objcopy --strip-debug foo" to create a>
executabil curățat.
1.<Run "objcopy --add-gnu-debuglink=foo.dbg foo">
pentru a adăuga o legătură către informațiile de depanare în executabilul curățat.

Notă - alegerea „.dbg” ca extensie pentru fișierul de informații de depanare este arbitrară. De asemenea, pasul „--only-keep-debug” este opțional. În schimb, ați putea face așa:

1.<Leagă executabilul în mod normal.>
1.<Copy "foo" to "foo.full">
1.<Run "objcopy --strip-debug foo">
1.<Run "objcopy --add-gnu-debuglink=foo.full foo">

adică, fișierul indicat de --add-gnu-debuglink poate fi executabilul complet. Nu trebuie să fie un fișier creat de opțiunea --only-keep-debug.

Notă - această opțiune este destinată utilizării numai pentru fișierele complet legate. Nu are sens să fie utilizat în cazul fișierelor obiect, unde informațiile de depanare pot fi incomplete. În plus, caracteristica gnu_debuglink suportă în prezent doar prezența unui singur nume de fișier care conține informații de depanare, nu mai multe nume de fișiere pentru fiecare fișier obiect în parte.

Elimină conținutul tuturor secțiunilor DWARF .dwo, lăsând secțiunile de depanare rămase și toate simbolurile intacte. Această opțiune este destinată utilizării de către compilator ca parte a opțiunii -gsplit-dwarf, care împarte informațiile de depanare între fișierul .o și un fișier .dwo separat. Compilatorul generează toate informațiile de depanare în același fișier, apoi utilizează opțiunea --extract-dwo pentru a copia secțiunile .dwo în fișierul .dwo, apoi opțiunea --strip-dwo pentru a elimina aceste secțiuni din fișierul .o original.
Extrage conținutul tuturor secțiunilor DWARF .dwo. Consultați opțiunea --strip-dwo pentru mai multe informații.
Specifică alinierea fișierului. Secțiunile din fișier vor începe întotdeauna la poziții de fișier care sunt multipli ai acestui număr. Valoarea implicită este 512. [Această opțiune este specifică țintelor PE.]
Specifică numărul de octeți de memorie care trebuie rezervați (și opțional angajați) pentru a fi utilizați ca grămadă pentru acest program. [Această opțiune este specifică țintelor PE.]
Utilizează valoare ca adresă de bază a programului sau a dll-ului dumneavoastră. Aceasta este cea mai joasă locație de memorie care va fi utilizată atunci când programul sau dll-ul dumneavoastră este încărcat. Pentru a reduce nevoia de realocare și pentru a îmbunătăți performanța dll-urilor dvs., fiecare trebuie să aibă o adresă de bază unică și să nu se suprapună peste alte dll-uri. Valoarea implicită este 0x400000 pentru executabile și 0x10000000 pentru dll-uri. [Această opțiune este specifică obiectivelor PE.]
[Această opțiune este specifică țintelor PE.]

Stabilește câmpul de aliniere a secțiunii din antetul PE - dacă este prezent unul în binar. Secțiunile din memorie vor începe întotdeauna la adrese care sunt un multiplu al acestui număr. Valoarea implicită este 0x1000.

Notă - dacă adresele LMA sau VMA ale unei secțiuni nu mai sunt aliniate și aceste adrese nu au fost definite prin intermediul opțiunilor --set-section-lma sau --set-section-vma, iar fișierul a fost complet realocat, atunci va fi emis un mesaj de avertizare. Utilizatorul va trebui să decidă dacă LMA și VMA trebuie actualizate.

Specifică numărul de octeți de memorie care urmează să fie rezervați (și opțional angajați) pentru a fi utilizați ca stivă pentru acest program. [Această opțiune este specifică țintelor PE.]
Specifică subsistemul sub care se va executa programul dumneavoastră. Valorile valide pentru which sunt "native", "windows", "console", "posix", "efi-app", "efi-bsd", "efi-rtd", "sal-rtd", și "xbox". Opțional, puteți defini și versiunea subsistemului. Valorile numerice sunt acceptate și pentru which. [Această opțiune este specifică țintelor PE.]
Păstrează fanioanele și simbolurile de secțiune ale fișierului, dar elimină toate datele de secțiune. Mai exact, opțiunea:
*<elimină conținutul tuturor secțiunilor;>
*<stabilește dimensiunea fiecărei secțiuni la zero; și>
*<pune adresa de start a fișierului la zero.>

Această opțiune este utilizată pentru a crea un fișier .sym pentru un nucleu VxWorks. Poate fi, de asemenea, o modalitate utilă de a reduce dimensiunea unui fișier de intrare al editorului de legături cu --just-symbols.

Comprimă secțiunile de depanare DWARF utilizând zlib cu SHF_COMPRESSED din ABI ELF. Notă - dacă comprimarea ar face de fapt o secțiune mai mare, atunci aceasta nu este comprimată.
Pentru fișierele ELF, aceste opțiuni controlează modul în care sunt comprimate secțiunile de depanare DWARF. --compress-debug-sections=none este echivalentă cu --decompress-debug-sections. --compress-debug-sections=zlib și --compress-debug-sections=zlib-gabi sunt echivalente cu --compress-debug-sections. --compress-debug-sections=zlib-gnu comprimă secțiunile de depanare DWARF utilizând formatul învechit zlib-gnu. Secțiunile de depanare sunt redenumite pentru a începe cu .zdebug. --compress-debug-sections=zstd comprimă secțiunile de depanare DWARF utilizând zstd. Notă - dacă comprimarea ar face de fapt o secțiune mai mare, atunci aceasta nu este nici comprimată, nici redenumită.
Decomprimă secțiunile de depanare DWARF. Pentru o secțiune .zdebug, numele original este restaurat.
Pentru fișierele ELF, aceste opțiuni controlează dacă simbolurile comune trebuie convertite la tipul "STT_COMMON" sau "STT_OBJECT". --elf-stt-common=yes convertește tipul de simbol comun în "STT_COMMON". --elf-stt-common=no convertește tipul de simbol comun în "STT_OBJECT".
Pentru fișierele ELF, încearcă (sau nu încearcă) să reducă dimensiunea oricărei secțiuni de tip SHT_NOTE prin eliminarea notelor duplicate.
Afișează numărul versiunii objcopy.
Pentru ieșirea Verilog, această opțiune controlează numărul de octeți convertiți pentru fiecare element de date de ieșire. Ținta de intrare controlează „endianness-ul”, ordinea de octeți a conversiei.
Ieșire detaliată: listează toate fișierele obiect modificate. În cazul arhivelor, objcopy -V enumeră toți membrii arhivei.
Afișează un rezumat al opțiunilor pentru objcopy.
Afișează o listă cu toate arhitecturile și formatele de obiecte disponibile.
@fișier
Citește opțiunile liniei de comandă din fișier. Opțiunile citite sunt inserate în locul opțiunii originale @fișier. Dacă fișier nu există sau nu poate fi citit, atunci opțiunea va fi tratată literal și nu va fi eliminată.

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.

CONSULTAȚI ȘI

ld(1), objdump(1), și intrările Info pentru binutils.

DREPTURI DE AUTOR

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”.

TRADUCERE

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.

28 august 2025 binutils-2.45