Çekiciniz olduğunda, tüm problemler çivi gibi görünür ...
Normalize Sıkıştırma Mesafesi - NCD denen bir şeyi inceledim - bir süre önce ve sizinkine benzer bir sorun yaşarsam deneyebilirdim.
-
Örneklerden oluşan bir veritabanı hazırlardım. Bilmek istediğiniz her mimari için değişken boyutlarda 20 program alıp kaydederdim.
-
Hangi mimari olduğunu bilmek istediğim bir programla karşılaştığımda, ben "Tüm örneklerime göre NCD olduğunu hesaplardım.
-
En iyi (daha küçük) NCD'yi seçerdim ve ardından gerçek bir eşleşme olup olmadığını kontrol ederdim (hadi" Diyelim ki, keşfedilen mimari üzerinde çalıştırmaya çalışıyorum).
Güncelleme
elle . Nasıl yaptım:
-
SPARC için 20 dosyanız var ve onlara A01, A02, A03, vb. Diyorsunuz. X86 dosyalarınız: B01, B02, vb.
-
Bilinmeyen dosyayı alır ve XX adını verirsiniz.
-
Sizin tercih edilen sıkıştırma aracı (Gzip kullandım, ancak bu cevabın sonundaki açıklamalara bakın).
-
İlk çift için NCD'yi hesaplayın:
NCD (XX, A01) = (Z (XX + A01) - min (Z (XX), Z (A01)) / maks (Z (XX), Z (A01))
Z (bir şey) -> bir şeyi Gzip ile sıkıştırdığınız ve sıkıştırmadan sonra dosya boyutunu aldığınız anlamına gelir. Örneğin, 8763 bayt, yani Z (bir şey) = 8763.
XX + A01 -> bir şeyleri birleştirdiğiniz anlamına gelir. XX dosyasının sonuna A01 dosyasını eklersiniz. Linux'ta bir "cat XX A01> XXA01" yapabilirsiniz.
min ( ) ve max () -> sıkıştırılmış XX ve A01 boyutunu hesaplar ve elde ettiğiniz minimum ve maksimumları kullanırsınız.
Yani bir NCD değeriniz olacak: 0 ile A01 arasında 1'i seçin ve olabildiğince çok ondalık basamak kullanın, çünkü bazen fark 7. veya 8. basamaktadır. Bu, 0,9999999887 ile 0,9999999524'ü karşılaştırmak gibi olacaktır.
Y Bunu her dosya için yapacağız, böylece SPARC için 20, x86 için 20 NCD sonucunuz olacak ...
Hepsinden daha küçük olan NCD'yi alın. Diyelim ki B07 dosyası size daha küçük BOH verdi. Yani, muhtemelen bilinmeyen dosya bir x86'dır.
İpuçları:
-
bilmediğiniz dosya ve test dosyalarınız benzer boyutta olmalıdır. Bir dosyayı daha büyük veya daha küçük olanlarla karşılaştırdığınızda, NCD bunu sihir yapmaz. Yani, 5 - 10k arası dosyaları test edecekseniz, 2.5k, 5k, 7.5k, 10k, 12.5k boyutlarında test dosyaları alacağım ...
-
Master derecemde her zaman daha küçük NCD değerini kullanarak daha iyi sonuçlar aldım. İkinci en iyi yöntem, biraz oylama yapmaktı: 5 daha küçük BOH sonucunu elde etmek ve hangi mimarinin daha fazla oy aldığını görmek. Örneğin: daha küçük NCD'ler A03, A05, B02, B06, B07 idi -> B 3 oy aldı, bu yüzden x86 olduğunu söyleyebilirim ...
-
kompresör tabanlı Zip yapısında 32kB'lik bir sınırlama vardır: nesneleri sıkıştırma biçimlerinde, sadece 32kB'yi dikkate alırlar. XX + A01'iniz bundan daha büyükse, Gzip, Zip vb. Size iyi sonuçlar vermeyecektir. Yani, 15 veya 16kB'den büyük dosyalar için başka bir sıkıştırıcı seçerdim: PPMD, Bzip ...