2012-11-16 17 views
5

W systemie Linux istnieje sposób obliczenia różnic między dwoma plikami binarnymi (tzn. Dwoma plikami wykonywanymi)?jak obliczyć różnice między dwoma plikami binarnymi (np. Dwoma plikami wykonywalnymi) w Linuksie

Pozwolę sobie dokładniej: chcę wiedzieć, jak obliczyć różnicę (różnicę) między dwiema wersjami pliku wykonywalnego lub aplikacji lub oprogramowania w systemie Linux. Na przykład, jeśli muszę pobrać i zainstalować tylko zaktualizowaną część (różnicę między najnowszą wersją a starszą wersją) istniejącej aplikacji lub binarnie, jak to zrobić w Linuksie.

+0

Najprostszym sposobem może być porównanie kodu źródłowego, jeśli jest on dostępny. –

+0

Witam Basile, nie mam możliwości porównania kodu źródłowego, tylko dostępne rzeczy to dwie wersje binarnej, jedna najnowsza wersja, a druga to stara wersja. – indranil

+0

Ale co można zrobić z wynikiem binarnego porównania wykonywalnego? Dlaczego tak naprawdę pytasz? –

Odpowiedz

2

diff powie, jeśli pliki binarne są różne:

diff bin1 bin2 
Binary files bin1 and bin2 differ 

Jeśli chcesz różnicę, użyj cmp:

cmp -l bin1 bin2 
    25 20 320 
    26 4 3 
    41 270 160 
209 4 264 
210 7 6 

Opcja -l wypisuje liczbę bajtów, a różnica:

-l --verbose 
     Output byte numbers and values of all differing bytes. 
0

Spróbuj cksum - daje wskazówkę, że są one takie same

9

Można użyć narzędzia bsdiff, a to towarzysz bspatch, do prowadzenia skutecznych dyferencjału i łaty plików binarnych.

Jeśli chcesz uzyskać jeszcze mniejsze poprawki, możesz przejrzeć Courgette z Google Chrome. Jest zbudowany na bsdiff, ale zapewnia jeszcze bardziej wydajne różnice w plikach wykonywalnych przez ich deasemblowanie przed wykonaniem porównania. Nie jest dystrybuowany jako osobny projekt, ale można go uzyskać od Chromium source repository (jak do check out the code).

Istnieje również narzędzie xdelta, które było dłuższe niż bsdiff. Według autora bsdiff, jest to znacznie mniej wydajne; łatki są znacznie większe. Ma tę zaletę, że obsługuje standardowy format VCDIFF (RFC 3284), który jest obsługiwany przez kilka innych narzędzi, więc jeśli potrzebujesz pracować z takimi innymi narzędziami, byłby bardziej przydatny.

+0

Jedno zastrzeżenie: systemy wbudowane mopów OP (w tagach), a strona główna bsdiff mówi "bsdiff jest dość głodny pamięci" - nigdy o tym nie myślałem. – loreb

+0

@loreb Część, która jest głodna w pamięci jest częścią "diff", w której generujesz deltę (zazwyczaj na maszynie programistycznej lub budującej). Część łatki ma znacznie bardziej uzasadnione wymagania dotyczące pamięci. –

+0

Nie przyszło mi to do głowy, dziękuję – loreb

-1

Można użyć diff:

diff old_file new_file 

Można również użyć md5 ale trzeba porównać wyniki niż. Może być również używany do sprawdzania sumy pobranego pliku, jeśli dostępna jest suma kontrolna md5.

Powiązane problemy