Kiedy masz młotek, wszystkie problemy wyglądają jak gwoździe ...
Badałem coś, co nazywa się znormalizowaną odległością ucisku - NCD - jakiś czas temu i spróbuję, gdybym miał problem podobny do twojego.
-
Zrobiłbym bazę przykładów. Weźmie 20 programów dla każdej architektury, którą chcesz znać, o różnych rozmiarach, i zapisze je.
-
W konfrontacji z programem, który chciałem wiedzieć, jaka to architektura, Obliczyłbym, że to NCD na wszystkich moich przykładach.
-
Wybrałbym najlepszy (mniejszy) NCD, a następnie zweryfikowałbym, czy jest to prawdziwe dopasowanie (niech powiedzmy, próbując uruchomić go na odkrytej architekturze).
Aktualizacja
Zawsze robiłem w ręcznie , jeśli chodzi o NCD. Jak to zrobiłem:
-
masz 20 plików dla SPARC i nazywasz je A01, A02, A03 i tak dalej. Twoje pliki x86: B01, B02 itd.
-
Otrzymujesz nieznany plik i nazywasz go XX.
-
Wybierz swój preferowane narzędzie do kompresji (użyłem Gzip, ale zobacz uwagi na końcu tej odpowiedzi).
-
Oblicz NCD dla pierwszej pary:
NCD (XX, A01) = (Z (XX + A01) - min (Z (XX), Z (A01)) / max (Z (XX), Z (A01))
Z (coś) -> oznacza, że kompresujesz coś za pomocą Gzip i uzyskujesz rozmiar pliku po kompresji. Na przykład 8763 bajtów, więc Z (coś) = 8763.
XX + A01 -> oznacza, że łączysz rzeczy. Dodajesz plik A01 na koniec pliku XX. W Linuksie możesz wykonać „cat XX A01> XXA01”.
min ( ) i max () -> obliczasz skompresowany rozmiar XX i A01 i używasz minimum i maksimum, które otrzymujesz.
Otrzymasz wartość NCD: będzie leżeć między 0 a 1 i użyj jak największej liczby miejsc po przecinku, ponieważ czasami różnica jest na siódmej lub ósmej cyfrze. Będzie to jak porównanie 0.999999887 z 0.999999524.
Y Zrobisz to dla każdego pliku, więc otrzymasz 20 wyników NCD dla SPARC, 20 dla x86 ...
Zdobądź mniejszy NCD ze wszystkich. Powiedzmy, że plik B07 dał ci mniejszy NCD. Więc prawdopodobnie nieznany plik to x86.
Porady:
-
Twój nieznany plik i testowe muszą mieć podobny rozmiar. Kiedy porównujesz plik z większymi lub mniejszymi, NCD nie zrobi tego magicznie. Tak więc, jeśli będziesz testować pliki o rozmiarze od 5 do 10 KB, otrzymam pliki testowe o rozmiarach 2,5, 5, 7,5, 10, 12,5 ...
-
Na studiach magisterskich uzyskiwałem lepsze wyniki, zawsze stosując mniejszą wartość NCD. Drugą najlepszą metodą było przeprowadzenie głosowania: uzyskaj 5 mniejszych wyników NCD i zobacz, która architektura uzyskała więcej głosów. Np .: mniejsze NCD to A03, A05, B02, B06, B07 -> B idą 3 głosy, więc powiedziałbym, że są to kompresory x86 ...
-
oparte na kompresorach na konstrukcji Zip mają ograniczenie 32kB: sposób kompresji rzeczy, po prostu rozważają 32kB. Jeśli Twój XX + A01 jest większy niż ten, Gzip, Zip itp. Nie przyniesie dobrych wyników. Tak więc, dla plików, które są większe niż 15 lub 16kB, wybrałbym inny kompresor: PPMD, Bzip ...