Provided by: manpages-ro_4.26.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.45. 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.  (&).

       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.

                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.

                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.

                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.
       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).
       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  leshort  <0x40   MS-DOS executable
           >0x18  leshort  >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 [[.,][bBcCeEfFgGhHiIlmsSqQ]][+-][ 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 [bBcCeEfFgGhHiIlmsSqQ].  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
           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       leshort <0x40   MZ executable (MS-DOS)
           # sare peste întregul bloc de mai jos dacă nu este un executabil extins
           >0x18       leshort >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șiern
           >0x18       leshort <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       leshort >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 0x184     for DEC Alpha

     Decalajele indirecte și relative pot fi combinate:

           0             string  MZ
           >0x18         leshort <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             leshort >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            leshort >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             leshort      >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
           >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                                           18 aprilie 2023                                        MAGIC(5)