Kad imate čekić, svi problemi izgledaju poput čavala ...
Proučio sam nešto što se naziva Normalizirana udaljenost kompresije - NCD - prije nekog vremena, i pokušao bih ako bih imao problem sličan vašem.
-
Napravio bih bazu podataka s primjerima. Trebalo bi 20 programa za svaku arhitekturu koju želite znati, s promjenjivim veličinama, i spremiti ih.
-
Kada sam se suočio s programom za koji sam želio znati o kojoj se arhitekturi radi, 'Izračunao bih da je NCD prema svim mojim primjerima.
-
Odabrao bih najbolji (manji) NCD i zatim bih ga provjerio je li to stvarno podudaranje (neka recimo, pokušavam to pokrenuti na otkrivenoj arhitekturi).
Ažuriranje
Uvijek sam to radio u ručno , kada je NCD u pitanju. Kako sam to učinio:
-
imate 20 datoteka za SPARC i nazivate ih A01, A02, A03 i tako dalje. Vaše x86 datoteke: B01, B02 itd.
-
Dobivate nepoznatu datoteku i nazivate je XX.
-
Odaberite svoju preferirani alat za kompresiju (koristio sam Gzip, ali vidi napomene na kraju ovog odgovora).
-
Izračunajte NCD za prvi par:
NCD (XX, A01) = (Z (XX + A01) - min (Z (XX), Z (A01)) / maks (Z (XX), Z (A01))
Z (nešto) -> znači da komprimirate nešto pomoću Gzipa i nakon kompresije dobijete veličinu datoteke. Na primjer, 8763 bajta, dakle Z (nešto) = 8763.
XX + A01 -> znači da spajate stvari. Datoteku A01 dodajte na kraj datoteke XX. U Linuxu možete napraviti ´cat XX A01> XXA01´.
min ( ) i max () -> izračunavate komprimiranu veličinu XX i A01 i koristite najmanji i najveći maksimum koji dobijete.
Tako ćete imati NCD vrijednost: ležati će između 0 i 1 i upotrijebite što više decimala možete jer je razlika ponekad u 7. ili 8. znamenci. To će biti poput usporedbe 0,999999887 s 0,999999524.
Y to ćete učiniti za svaku datoteku, tako da ćete imati 20 NCD rezultata za SPARC, 20 za x86 ...
Nabavite manji NCD od svih. Recimo da vam je datoteka B07 dala manji NCD. Dakle, vjerojatno je datoteka nepoznanica x86.
Savjeti:
-
vaša nepoznanica i testne datoteke moraju imati sličnu veličinu. Kada datoteku usporedite s većom ili manjom, NCD to neće učiniti čarobnom. Dakle, ako budete testirali datoteke od 5 do 10 000, dobio bih testne datoteke od 2,5 k, 5 k, 7,5 k, 10 k, 12,5 k ...
-
Na magisteriju sam postizao bolje rezultate uvijek koristeći manju vrijednost NCD. Druga najbolja metoda bila je glasovanje: dobiti 5 manjih rezultata NCD-a i vidjeti koja je arhitektura dobila više glasova. Npr .: manji NCD bili su A03, A05, B02, B06, B07 -> B prošao je 3 glasa, pa bih rekao da je to x86 ...
-
kompresori na Zip konstrukciji imaju ograničenje od 32 KB: način na koji komprimiraju stvari, uzimaju u obzir 32 KB. Ako je vaš XX + A01 veći od ovog, Gzip, Zip itd. Neće vam dati dobre rezultate. Dakle, za datoteke veće od 15 ili 16 kB odabrao bih drugi kompresor: PPMD, Bzip ...