Provided by: manpages-ro_4.27.0-1_all bug

NUME

       magic — fișier de model magic al comenzii «file»

DESCRIERE

       Această  pagină  de manual documentează formatul fișierelor magice utilizat de comanda file(1), versiunea
       5.46. Comanda file(1) identifică tipul unui fișier  folosind,  printre  alte  teste,  un  test  pentru  a
       verifica  dacă  fișierul  conține anumite “„modele magice””.  Baza de date a acestor “„modele magice”” se
       află de obicei într-un fișier binar din /usr/share/misc/magic.mgc sau  într-un  director  de  fișiere  de
       fragmente  de modele magice din textul sursă din /usr/share/misc/magic.  Baza de date specifică ce modele
       trebuie testate, ce mesaj sau tip MIME trebuie afișat dacă se  găsește  un  anumit  model  și  informații
       suplimentare care trebuie extrase din fișier.

       Formatul  fișierelor  de  fragmente  sursă  care  sunt utilizate pentru crearea acestei baze de date este
       următorul: Fiecare linie a unui fișier de fragmente specifică un test care urmează să fie  efectuat.   Un
       test  compară datele care încep la o anumită poziție în fișier cu o valoare de octet, un șir de caractere
       sau o valoare numerică. Dacă testul reușește, se imprimă un mesaj.  Linia este  formată  din  următoarele
       câmpuri:

       poziția  Un  număr  care  specifică  poziția (în octeți) în fișier a datelor care urmează să fie testate.
                Această poziție poate fi un număr negativ dacă este:
                   Prima poziție directă a intrării magice (la nivelul de  continuare  0),  caz  în  care  este
                    interpretată  ca  o  poziție  de  la  sfârșitul  fișierului,  mergând  înapoi.   Acest lucru
                    funcționează numai atunci când este disponibil un descriptor  de  fișier  pentru  fișier  și
                    acesta este un fișier obișnuit.
                   O poziție de continuare în raport cu sfârșitul ultimului câmp de nivel superio.  (&).
                Dacă  poziția  începe  cu  simbolul “+”, atunci toate pozițiile sunt interpretate ca fiind de la
                începutul fișierului (implicit).

       tipul    Tipul de date care urmează să fie testate.  Valorile posibile sunt:

                byte        O valoare de un octet.

                short       O valoare de doi octeți în ordinea nativă de octeți a acestei mașini.

                long        O valoare de patru octeți în ordinea nativă de octeți a acestei mașini.

                quad        O valoare de opt octeți în ordinea nativă de octeți a acestei mașini.

                float       Un număr cu virgulă mobilă IEEE pe 32 de biți, cu precizie simplă, în ordinea nativă
                            a octeților acestei mașini.

                double      Un număr cu virgulă mobilă IEEE pe 64 de biți, cu precizie dublă, în ordinea  nativă
                            a octeților acestei mașini.

                string      Un  șir de octeți. Specificarea tipului de șir poate fi urmată opțional de o opțiune
                            /<width>(lățimea) și opțional de un set de fanioane /[bCcftTtWw]*. Lățimea limitează
                            numărul de caractere care urmează să fie copiate. Zero înseamnă  toate  caracterele.
                            Sunt acceptate următoarele fanioane:
                                b  Forțează testarea fișierelor binare.
                                C  Utilizează  potrivirea insensibilă la majuscule: caracterele în majuscule din
                                   magic se potrivesc atât cu caracterele  în  minuscule,  cât  și  cu  cele  în
                                   majuscule  din  țintă,  în  timp  ce  caracterele  în  minuscule din magic se
                                   potrivesc numai cu caracterele în majuscule din țintă.
                                c  Utilizați potrivirea insensibilă la minuscule: caracterele cu  minuscule  din
                                   magic  se  potrivesc  atât  cu  caracterele  în  minuscule, cât și cu cele în
                                   majuscule din țintă, în  timp  ce  caracterele  în  majuscule  din  magic  se
                                   potrivesc  numai  cu  caracterele în majuscule din țintă.  Pentru a realiza o
                                   potrivire completă insensibilă la majuscule, specificați  atât  “c”,  cât  și
                                   “C”.
                                f  Solicită  ca  șirul  de  caractere  potrivit  să fie un cuvânt complet, nu un
                                   cuvânt parțial potrivit.
                                T  Decupează șirul de caractere, adică spațiile albe anterioare și posterioare
                                t  Forțează testarea fișierelor text.
                                W  Spațiu alb compact în țintă, care trebuie să conțină cel puțin un caracter de
                                   spațiu alb. Dacă magia are n spații goale consecutive, ținta trebuie să  aibă
                                   cel puțin n spații goale consecutive pentru a se potrivi.
                                w  Tratează  fiecare  spațiu liber din magic ca un spațiu liber opțional. Acesta
                                   este șters înainte ca șirul să fie imprimat.

                pstring     Un șir în stil Pascal în care primul octet/short/int este  interpretat  ca  lungimea
                            fără  semn.  Lungimea implicită este octetul și poate fi specificată ca modificator.
                            Sunt acceptate următoarele modificatoare:
                                B  O lungime de un octet (implicit).
                                H  O lungime big endian de 2 octeți.
                                h  O lungime little endian de 2 octeți.
                                L  O lungime big endian de 4 octeți.
                                l  O lungime little endian de 4 octeți.
                                J  Lungimea se include pe sine în calculul său.
                            Șirul nu se termină cu NUL.  “J” este utilizată mai degrabă decât cea mai  valoroasă
                            “I” deoarece acest tip de lungime este o caracteristică a formatului JPEG.

                date        O valoare de patru octeți interpretată ca o dată UNIX.

                qdate       O valoare de opt octeți interpretată ca o dată UNIX.

                ldate       O  valoare  de patru octeți interpretată ca o dată în stil UNIX, dar interpretată ca
                            oră locală și nu ca UTC.

                qldate      O valoare de opt octeți interpretată ca o dată în stil UNIX, dar interpretată ca oră
                            locală și nu ca UTC.

                qwdate      O valoare de opt octeți interpretată ca o dată în stilul Windows.

                msdosdate   O valoare de două octeți interpretată ca dată în stilul FAT/DOS.

                msdostime   O valoare de două octeți interpretată ca oră în stilul FAT/DOS.

                beid3       O lungime ID3 de 32 de biți în ordinea octeților big-endian.

                beshort     O valoare de doi octeți în ordinea octeților big-endian.

                belong      O valoare de patru octeți în ordinea octeților big-endian.

                bequad      O valoare de opt octeți în ordinea octeților big-endian.

                befloat     Un număr cu virgulă mobilă IEEE pe 32  de  biți,  cu  precizie  simplă,  în  ordinea
                            octeților big-endian.

                bedouble    Un  număr  cu  virgulă  mobilă  IEEE  pe  64 de biți, cu precizie simplă, în ordinea
                            octeților big-endian.

                bedate      O valoare de patru octeți în ordinea octeților big-endian, interpretată  ca  o  dată
                            Unix.

                beqdate     O  valoare  de  opt  octeți  în ordinea octeților big-endian, interpretată ca o dată
                            Unix.

                beldate     O valoare de patru octeți în ordinea octeților big-endian, interpretată ca o dată în
                            stil UNIX, dar interpretată ca oră locală în loc cat UTC.

                beqldate    O valoare de opt octeți în ordinea octeților big-endian, interpretată ca o  dată  în
                            stil UNIX, dar interpretată ca oră locală în loc cat UTC.

                beqwdate    O  valoare  de opt octeți în ordinea octeților big-endian, interpretată ca o dată în
                            stilul Windows.

                bemsdosdate
                            O valoare de doi octeți în ordinea octeților big-endian,  interpretată  ca  dată  în
                            stilul FAT/DOS.

                bemsdostime
                            O  valoare  de  doi  octeți  în ordinea octeților big-endian, interpretată ca oră în
                            stilul FAT/DOS.

                bestring16  Un șir Unicode (UCS16) de doi octeți în ordinea octeților big-endian.

                leid3       O lungime ID3 de 32 de biți în ordinea octeților little-endian.

                leshort     O valoare de doi octeți în ordinea octeților little-endian.

                lelong      O valoare de patru octeți în ordinea octeților little-endian.

                lequad      O valoare de opt octeți în ordinea octeților little-endian.

                lefloat     Un număr cu virgulă mobilă IEEE pe 32  de  biți,  cu  precizie  simplă,  în  ordinea
                            octeților little-endian.

                ledouble    Un  număr  cu  virgulă  mobilă  IEEE  pe  64  de biți, cu precizie dublă, în ordinea
                            octeților little-endian.

                ledate      O valoare de patru octeți în ordinea octeților little-endian, interpretată ca o dată
                            UNIX.

                leqdate     O valoare de opt octeți în ordinea octeților little-endian, interpretată ca  o  dată
                            UNIX.

                leldate     O valoare de patru octeți în ordinea octeților little-endian, interpretată ca o dată
                            în stil UNIX, dar interpretată ca oră locală în loc de oră UTC.

                leqldate    O  valoare  de opt octeți în ordinea octeților little-endian, interpretată ca o dată
                            în stil UNIX, dar interpretată ca oră locală în loc de oră UTC.

                leqwdate    O valoare de opt octeți în ordinea octeților little-endian, interpretată ca  o  dată
                            în stilul Windows.

                lemsdosdate
                            O  valoare  de  doi  octeți în ordinea octeților big-endian, interpretată ca dată în
                            stilul FAT/DOS.

                lemsdostime
                            O valoare de doi octeți în ordinea octeților  big-endian,  interpretată  ca  oră  în
                            stilul FAT/DOS.

                lestring16  Un șir Unicode (UCS16) de doi octeți în ordinea octeților little-endian.

                melong      O valoare de patru octeți în ordinea octeților middle-endian (PDP-11).

                medate      O  valoare de patru octeți în ordinea octeților middle-endian (PDP-11), interpretată
                            ca o dată UNIX.

                meldate     O valoare de patru octeți în ordinea octeților middle-endian (PDP-11),  interpretată
                            ca o dată în stil UNIX, dar interpretată ca oră locală în loc de oră UTC.

                indirect    Începând  de  la  poziția  dată,  se consultă din nou baza de date a magiei. Poziția
                            magiei indirect este implicit absolută în fișier, dar se poate specifica /r pentru a
                            indica faptul că poziția este relativă de la începutul intrării.

                name        Definește o instanță magică “named” (numită) care poate fi  apelată  de  la  o  altă
                            intrare  magică use, ca un apel de subrutină. Pozițiile magice directe ale instanței
                            numite sunt relative la poziția intrării  corespondente  anterioare,  dar  pozițiile
                            indirecte  sunt  relative  la  începutul  fișierului, ca de obicei. Intrările magice
                            numite se potrivesc întotdeauna.

                use         Apelează  recursiv  magia  numită  începând  de  la  poziția  curentă.  Dacă  numele
                            referinței începe cu ^, atunci endianness-ul magiei este schimbat; dacă magia numită
                            leshort, de exemplu, aceasta este tratată ca beshort și viceversa.  Acest lucru este
                            util pentru a evita dublarea regulilor pentru diferite endianness-uri.

                regex       O  potrivire  a  expresiei  regulate  în  sintaxa POSIX extinsă a expresiei regulate
                            (precum egrep). Procesarea expresiilor regulate poate dura un timp exponențial,  iar
                            performanța lor este greu de prevăzut, astfel încât utilizarea lor este descurajată.
                            Atunci când sunt utilizate în medii de producție, performanța lor trebuie verificată
                            cu  atenție.  Dimensiunea  șirului  de  caractere  de  căutat  trebuie, de asemenea,
                            limitată prin specificarea /<length>, pentru a evita problemele  de  performanță  în
                            scanarea  fișierelor  lungi.  Specificarea  tipului  poate  fi,  de asemenea, urmată
                            opțional de /[c][s][l].  Fanionul “c” face  ca  potrivirea  să  fie  insensibilă  la
                            majuscule,  în  timp  ce  fanionul “s” actualizează pozițial la poziția de început a
                            potrivirii, în loc de cea de  la  sfârșit.  Modificatorul  “l”,  schimbă  limita  de
                            lungime  în  număr de linii în loc de un număr de octeți. Liniile sunt delimitate de
                            delimitatorul de linie nativ al platformelor. Atunci când se specifică un  număr  de
                            linii,  se  calculează  și un număr implicit de octeți, presupunând că fiecare linie
                            are o lungime de 80 de caractere. Dacă nu este specificat nici un număr  de  octeți,
                            nici un număr de linii, căutarea este limitată automat la 8Kio.  ^ și $ se potrivesc
                            cu  începutul  și  sfârșitul  liniilor  individuale,  respectiv,  nu cu începutul și
                            sfârșitul fișierului.

                search      O căutare literală de șir de caractere începând de la poziția dată. Se  pot  utiliza
                            aceleași  fanioane modificatoare ca pentru modelele de șir de caractere. Expresia de
                            căutare trebuie să conțină intervalul sub forma  /de  număr  care  este  numărul  de
                            poziții la care se va încerca potrivirea, începând de la poziția de pornire. Aceasta
                            este  potrivită  pentru  căutarea  în expresii binare mai mari cu poziții variabile,
                            utilizând eludările \ pentru caracterele  speciale.  Ordinea  modificatorului  și  a
                            numărului nu este relevantă.

                default     Acesta  este  destinat a fi utilizat cu testul x (care este întotdeauna adevărat) și
                            nu are tip. Se potrivește atunci când niciun alt test la acel nivel de continuare nu
                            s-a potrivit înainte. Ștergerea testelor potrivite pentru un nivel de continuare  se
                            poate face folosind testul clear.

                clear       Acest  test este întotdeauna adevărat și șterge fanionul de potrivire pentru nivelul
                            de continuare respectiv.  Este destinat a fi utilizat împreună cu testul default.

                der         Analizează fișierul ca pe un fișier  de  certificat  DER.  Câmpul  de  testare  este
                            utilizat  ca  un tip DER care trebuie să fie comparat. Tipurile DER sunt: eoc, bool,
                            int, bit_str, octet_str, null, obj_id, obj_desc, ext, real, enum,  embed,  utf8_str,
                            rel_oid,  time,  res2,  seq,  set,  num_str,  prt_str,  t61_str,  vid_str,  ia5_str,
                            utc_time, gen_time, gr_str, vis_str, gen_str,  univ_str,  char_str,  bmp_str,  date,
                            tod,  datetime,  duration,  oid-iri,  rel-oid-iri.  Aceste tipuri pot fi urmate de o
                            dimensiune numerică opțională, care indică lățimea câmpului în octeți.

                guid        Un identificator unic  global,  analizat  și  imprimat  ca  XXXXXXXX-XXXX-XXXX-XXXX-
                            XXXXXXXXXXXX. Formatul său este un șir de caractere.

                poziția     Aceasta  este  o valoare cvadruplă care indică poziția curentă a fișierului. Aceasta
                            poate fi utilizată pentru a determina dimensiunea fișierului sau a tamponului magic.
                            De exemplu, intrările magice:

                                  -0      offset  x       acest fișier are %lld octeți
                                  -0      offset  <=100   trebuie să fie mai mare de 100 de octeți \
                                                                  și este de doar %lld de octeți

                octal       Un șir reprezentând un număr octal.

                Pentru compatibilitate cu standardul Unix unic (Single Unix Standard), specificatorii de tip  dC
                și  d1  sunt  echivalenți  cu  byte,  specificatorii  de tip uC și u1 sunt echivalenți cu ubyte,
                specificatorii de tip dS și d2 sunt echivalenți cu short, specificatorii de tip uS  și  u2  sunt
                echivalenți  cu  ushort,  specificatorii  de  tip  dI,  dL,  și  d4  sunt  echivalenți  cu long,
                specificatorii de tip uI, uL, și u4 sunt echivalenți cu ulong, specificatorul  de  tip  d8  este
                echivalent cu quad, specificatorul de tip u8 este echivalent cu uquad, iar specificatorul de tip
                s  este  echivalent  cu  string.  În plus, specificatorul de tip dQ este echivalent cu quad, iar
                specificatorul de tip uQ este echivalent cu uquad.

                Fiecare model magic de nivel superior (a se vedea mai jos pentru  o  explicație  a  nivelurilor)
                este clasificat ca text sau binar în funcție de tipurile utilizate. Tipurile “regex” și “search”
                sunt  clasificate  ca  teste text, cu excepția cazului în care în model sunt utilizate caractere
                neimprimabile. Toate celelalte teste sunt clasificate ca binare. Un model de nivel superior este
                considerat a fi un test text atunci când toate modelele sale  sunt  modele  text;  altfel,  este
                considerat  a  fi  un  model  binar.  La  potrivirea unui fișier, se încearcă mai întâi modelele
                binare; dacă nu se găsește nicio  potrivire,  iar  fișierul  arată  ca  un  text,  se  determină
                codificarea acestuia și se încearcă modelele text.

                Tipurile  numerice  pot  fi  urmate  opțional  de & și de o valoare numerică, pentru a specifica
                faptul că valoarea trebuie să fie evaluată cu operatorul logic AND cu valoarea numerică  înainte
                de  efectuarea  oricărei  comparații.  Preadăugarea  unui u la tip indică faptul că comparațiile
                ordonate trebuie să fie fără semn.

       test     Valoarea care urmează să fie comparată cu valoarea din fișier. Dacă tipul este numeric,  această
                valoare  este specificată în format C; dacă este un șir de caractere, este specificată ca un șir
                de caractere C cu eludările obișnuite permise (de exemplu, \n pentru linie nouă).

                Valorile numerice pot fi precedate de un caracter care  indică  operația  care  urmează  să  fie
                efectuată.  Acesta  poate  fi =, pentru a specifica faptul că valoarea din fișier trebuie să fie
                egală cu valoarea specificată, <, pentru a specifica faptul că valoarea din  fișier  trebuie  să
                fie  mai  mică  decât  valoarea specificată, >, pentru a specifica faptul că valoarea din fișier
                trebuie să fie mai mare decât valoarea specificată, &, pentru a specifica faptul că valoarea din
                fișier trebuie să aibă activați toți biții care sunt activați în valoarea specificată, ^, pentru
                a specifica faptul că valoarea din fișier trebuie să fi eliminat oricare dintre biții care  sunt
                activați  în  valoarea  specificată  sau  ~,  valoarea  specificată  după este negată înainte de
                testare.  x, pentru a specifica că orice valoare se va potrivi. Dacă caracterul  este  omis,  se
                presupune  că  este  =.   Operatorii  &, ^ și ~ nu funcționează cu numere cu virgulă flotantă și
                numere de precizie dublă. Operatorul ! specifică faptul că linia se potrivește  dacă  testul  nu
                reușește.

                Valorile numerice sunt specificate în format C; de exemplu, 13 este zecimal, 013 este octal, iar
                0x13 este hexazecimal.

                Operațiile  numerice  nu  sunt  efectuate  pe  tipuri  de date, în schimb valoarea numerică este
                interpretată ca un decalaj.

                Pentru valorile șir de caractere, șirul din fișier trebuie  să  corespundă  șirului  specificat.
                Operatorii  =,  < și > (dar nu și &) pot fi aplicați șirurilor de caractere.  Lungimea utilizată
                pentru potrivire este cea a argumentului șirului  de  caractere  din  fișierul  magic.   Aceasta
                înseamnă  că  o  linie  se poate potrivi cu orice șir nevid (utilizat de obicei pentru a imprima
                apoi șirul), cu >\0 (deoarece toate șirurile nevid sunt mai mari decât șirul gol).

                Datele sunt tratate ca valori numerice în reprezentarea internă respectivă.

                Testul special x este întotdeauna evaluat ca fiind „true” (adevărat).

       message  Mesajul care urmează să fie afișat dacă comparația reușește. Dacă șirul conține  o  specificație
                de  format printf(3), valoarea din fișier (cu orice mascare specificată) este imprimată folosind
                mesajul ca șir de format.  Dacă șirul de caractere începe cu “\b”, mesajul imprimat este  restul
                șirului  de  caractere,  fără  niciun  spațiu  alb  adăugat  înainte  de  acesta: în mod normal,
                potrivirile multiple sunt separate de un singur spațiu.

       Creatorul și tipul unui APPLE cu 4+4 caractere APPLE pot fi specificate ca:

             !:apple CREATYPE

       O listă de extensii de nume de fișiere des întâlnite, separate prin bară oblică, poate fi specificată ca:

             !:ext   ext[/ext...]

       adică șirul literal “!:ext” urmat de o listă de extensii des întâlnite; de exemplu pentru imagini JPEG:

             !:ext jpeg/jpg/jpe/jfif

       Un tip MIME este dat pe o linie separată, care trebuie să fie următoarea  linie  fără  spațiu  liber  sau
       comentariu după linia magică care identifică tipul de fișier, și are următorul format:

             !:mime  MIMETYPE

       adică șirul literal “!:mime” urmat de tipul MIME.

       Un  punct  forte  opțional  poate  fi  furnizat  pe o linie separată, care se referă la descrierea magică
       curentă folosind următorul format:

             !:strength OPERAND VALOARE

       Operandul OPERAND poate fi: +, -, * sau /, iar  VALOARE  este  o  constantă  între  0  și  255.   Această
       constantă este aplicată folosind operandul specificat la puterea magică implicită calculată în prezent.

       Unele  formate de fișiere conțin informații suplimentare care trebuie afișate împreună cu tipul de fișier
       sau necesită teste suplimentare pentru a determina adevăratul tip de fișier.  Aceste  teste  suplimentare
       sunt  introduse  de  unul sau mai multe caractere > care preced pozișia.  Numărul de > de pe linie indică
       nivelul testului; o linie fără > la început este considerată a fi la nivelul  0.  Testele  sunt  aranjate
       într-o ierarhie arborescentă: dacă testul de pe o linie de la nivelul n reușește, toate testele următoare
       de  la  nivelul n+1 sunt efectuate, iar mesajele afișate dacă testele reușesc, până când apare o linie cu
       nivelul n (sau mai puțin). Pentru fișiere mai complexe, se pot utiliza mesaje goale pentru a obține  doar
       efectul „if/then”, în felul următor:

             0      string    MZ
             >0x18  uleshort  <0x40   MS-DOS executable
             >0x18  uleshort  >0x3f   extended PC executable (e.g., MS Windows)

       Decalajele  nu  trebuie să fie constante, ci pot fi citite și din fișierul examinat. Dacă primul caracter
       după ultimul > este un ( atunci șirul de caractere de după  paranteză  este  interpretat  ca  un  decalaj
       indirect.  Aceasta  înseamnă că numărul de după paranteză este utilizat ca un decalaj în fișier. Valoarea
       de la acel decalaj este citită și este utilizată din nou ca decalaj în fișier. Decalajele indirecte  sunt
       de  forma:  (x  [[.,][bBcCeEfFgGhHiIlmosSqQ]][+-][  y  ]).   Valoarea  lui x este utilizată ca decalaj în
       fișier. Un octet, o lungime id3, un număr scurt sau lung este  citit  la  acel  decalaj,  în  funcție  de
       specificatorul de tip [bBcCeEfFgGhHiIlLmsSqQ].  Valoarea este tratată ca având semn dacă se specifică “,”
       sau  fără  semn  dacă  se  specifică  “.”.   Tipurile cu majuscule interpretează numărul ca o valoare big
       endian, în timp ce versiunile cu litere mici interpretează numărul ca o valoare little  endian;  tipul  m
       interpretează  numărul  ca  o  valoare  middle  endian (PDP-11). La acest număr se adaugă valoarea y, iar
       rezultatul este utilizat ca decalaj în fișier. Tipul implicit dacă nu este  specificat  unul  este  long.
       Sunt recunoscute următoarele tipuri:

             Tip     Sy Mnemonic   Sy Endian Sy Dim.
             bcBC    Byte/Char     N/A       1
             efg     Double        Little    8
             EFG     Double        Big       8
             hs      Half/Short    Little    2
             HS      Half/Short    Big       2
             i       ID3           Little    4
             I       ID3           Big       4
             l       Long          Little    4
             L       Long          Big       4
             m       Middle        Middle    4
             o       Octal         Textual   Variable
             q       Quad          Little    8
             Q       Quad          Big       8

       În acest fel se pot examina structuri de lungime variabilă:

             # Executabilele MS Windows sunt de asemenea executabile MS-DOS valide
             0           string   MZ
             >0x18       uleshort <0x40  MZ executable (MS-DOS)
             # sare peste întregul bloc de mai jos dacă nu este un executabil extins
             >0x18       uleshort >0x3f
             >>(0x3c.l)  string   PE\0\0 PE executable (MS-Windows)
             >>(0x3c.l)  string   LX\0\0 LX executable (OS/2)

       Această  strategie de examinare are un dezavantaj: trebuie să vă asigurați că în cele din urmă se imprimă
       ceva, altfel utilizatorii pot obține o ieșire goală (cum ar fi atunci când nu există  nici  PE\0\0,  nici
       LE\0\0 în exemplul de mai sus).

       Dacă  acest  decalaj  indirect  nu  poate  fi  utilizată  direct, sunt posibile calcule simple: adăugarea
       [+-*/%&|^]număr între paranteze permite modificarea valorii citite din fișier înainte ca aceasta  să  fie
       utilizată ca decalaj:

             # Executabilele MS Windows sunt de asemenea executabile MS-DOS valide
             0           string   MZ
             # uneori, valoarea de la 0x18 este mai mică decât 0x40, dar există încă un
             # executabil extins, adăugat pur și simplu la fișier
             >0x18       uleshort <0x40
             >>(4.s*512) leshort  0x014c  COFF executable (MS-DOS, DJGPP)
             >>(4.s*512) leshort  !0x014c MZ executable (MS-DOS)

       Uneori  nu  cunoașteți  decalajul  exact, deoarece acesta depinde de lungimea sau de poziția (în cazul în
       care a fost utilizată indirectă anterior) câmpurilor precedente.  Puteți specifica un decalaj relativ  la
       sfârșitul ultimului câmp de nivel superior folosind ‘&’ ca prefix al decalajului:

             0           string   MZ
             >0x18       uleshort >0x3f
             >>(0x3c.l)  string   PE\0\0    PE executable (MS-Windows)
             # imediat după semnătura PE este tipul de CPU
             >>>&0       leshort  0x14c     for Intel 80386
             >>>&0       leshort  0x8664    for x86-64
             >>>&0       leshort  0x184     for DEC Alpha

       Decalajele indirecte și relative pot fi combinate:

             0             string   MZ
             >0x18         uleshort <0x40
             >>(4.s*512)   leshort  !0x014c MZ executable (MS-DOS)
             # dacă nu este COFF, merge înapoi cu 512 octeți și adaugă
             # decalajul luat de la octetul 2/3, care este un alt mod de a
             # găsi începutul executabilului extins
             >>>&(2.s-514) string   LE      LE executable (MS Windows VxD driver)

       Sau invers:

             0                 string   MZ
             >0x18             uleshort >0x3f
             >>(0x3c.l)        string   LE\0\0  LE executable (MS-Windows)
             # la decalajul 0x80 (-4, deoarece decalajele relative încep de la
             # sfârșitul potrivirii nivelului superior) în interiorul antetului LE,
             # găsim decalajul absolut către zona de cod, unde căutăm o semnătură specifică
             >>>(&0x7c.l+0x26) string   UPX     \b, UPX compressed

       Sau chiar amândouă!

             0                string   MZ
             >0x18            uleshort >0x3f
             >>(0x3c.l)       string   LE\0\0 LE executable (MS-Windows)
             # la decalajul 0x58 în interiorul antetului LE, găsim decalajul relativ
             # către o zonă de date în care căutăm o semnătură specifică
             >>>&(&0x54.l-3)  string   UNACE  \b, ACE self-extracting archive

       Dacă  trebuie  să  aveți  de-a  face cu perechi decalaj/lungime în fișierul dvs., chiar și a doua valoare
       dintr-o expresie în paranteze poate fi preluată din fișierul însuși, utilizând un alt set  de  paranteze.
       Rețineți că acest decalaj indirect suplimentar este întotdeauna relativ la începutul decalajului indirect
       principal.

             0                 string       MZ
             >0x18             uleshort     >0x3f
             >>(0x3c.l)        string       PE\0\0 PE executable (MS-Windows)
             # caută secțiunea PE numită „.idata”...
             >>>&0xf4          search/0x140 .idata
             # ...și merge la sfârșitul acesteia, calculat de la start+lungime;
             # acestea sunt situate la 14 și 10 octeți după numele secțiunii
             >>>>(&0xe.l+(-4)) string       PK\3\4 \b, ZIP self-extracting archive

       Dacă  aveți  o  listă  de valori cunoscute la un anumit nivel de continuare și doriți să furnizați un caz
       implicit de tip comutator:

             # curăță această continuare a nivelului de potrivire
             >18     clear   x
             >18     lelong  1       one
             >18     lelong  2       two
             >18     default x
             # imprimă potrivirea implicită
             >>18    lelong  x       unmatched 0x%x

CONSULTAȚI ȘI

       file(1) - comanda care citește acest fișier.

ERORI

       Formatele long, belong, lelong, melong, short, beshort și leshort nu depind de lungimea tipurilor de date
       C short și long de pe platformă, chiar dacă  specificația  unică  Unix  implică  acest  lucru.  Cu  toate
       acestea,  deoarece  OS  X  Mountain  Lion  a  trecut  de  suita de validare a specificației unice Unix și
       furnizează o versiune a file(1) în care acestea nu depind de dimensiunile tipurilor de  date  C  și  care
       este  construită  pentru un mediu pe 64 de biți în care long are 8 octeți în loc de 4 octeți, probabil că
       suita de validare nu testează dacă, de exemplu, long se referă la un element  cu  aceeași  dimensiune  ca
       tipul  de  date  C  long.  Probabil că ar trebui să existe nume de tip int8, uint8, int16, uint16, int32,
       uint32, int64 și uint64, precum și variante ale acestora cu ordinea octeților specificată,  pentru  a  fi
       mai clar că aceste tipuri au lățimile specificate.

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:
       https://www.gnu.org/licenses/gpl-3.0.html  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 .

Debian                                          27 noiembrie 2024                                       MAGIC(5)