Provided by: manpages-ro_4.27.0-1_all 

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)