2011-01-19 2 views

답변

8

나는 실용적이고 근사한 접근법으로 시작하고 몇 가지 더 최근의 접근법을 지적하겠습니다. 나는 오래 전 바이너리 파일

와 함께 작업을 보았다

접근, 사람들은 3 바이트로 확장 모든 바이트 (이전 및 임시 "텍스트"파일로 바이너리 파일의 새 버전을 확장 : 2 자리 16 진수 및 개행). 그런 다음 이전 버전의 "diff"(바이너리 파일을 확실히 처리 할 수 ​​없음)를 통해이 두 "텍스트"파일을 실행하여 패치 파일을 만듭니다. 그런 다음 "텍스트"패치 파일을 아직 8 비트 정리되지 않은 통신 회선을 통해 전송했습니다. 수신 측에서는 이전 이진 파일을 임시 텍스트 버전으로 확장 한 다음 해당 텍스트 파일을 패치 한 다음 새 텍스트 파일을 다시 이진 파일로 압축합니다. 각 쌍의 16 진수를 1 바이트로 압축하고 줄 바꿈과 틈새가 생길 수있는 모든 캐리지 리턴).

최근에 나는 rsync (또는 Unison과 같이 그 위에 구축 된 유틸리티)을 사용했습니다. 그것은 임의의 바이너리 파일을 잘 처리합니다. 필자는 로컬 컴퓨터에서 실행중인 Unison과 파일 서버에서 실행되는 rsync가 서로간에 앞뒤로 이야기하면서 실시간 업데이트를 수행합니다.

패치 파일 생성 방법에 관계없이 모든 데이터 압축 유틸리티를 사용하여 해당 파일을 압축 할 수 있습니다.

bsdiff를 사용하여 제안

StackOverflow: "how to crate a PATCH file for the binary difference output file" 내가 아는 한, 바이너리 파일 작업을 해야지,하는 것이 접근한다.

또 다른 StackOverflow question은 "vimdiff"가 임의의 바이트를 적절하게 처리하는 것으로 보입니다.

StackOverflow: "Useful Binary Diff Tool"에는 몇 가지 다른 이진 차이 도구가 나와 있습니다.

"rdiff"과 "rdiff-backup"및 "duplicity"라는 rsync를 기반으로하는 일부 도구를 사용하면 패치 파일을 만들 수 있습니다. 그런 다음 패치 파일을받은 사람은이 파일을 사용하여 이전 바이너리 파일을 새 바이너리 파일로 업데이트 할 수 있습니다.

Wikipedia claims 최신 "diff"및 "patch"유틸리티는 바이너리 파일을 지원합니다. 시도해 보셨습니까? 당신은 가능한 한 작은 실행 파일을 업데이트 할 때, 당신은 "How Courgette works"을 체크 아웃 할 수 있습니다 델타 파일을 만들기에 첨단 연구에 관심이 있다면 실행 파일 압축

에서

최첨단 연구 The Chromium Projects의 Stephen Adams 2009 기자.

패치를받는 컴퓨터는 이전 응용 프로그램을 "분해"하여 모든 절대 주소와 오프셋을 기호로 변환합니다. 그런 다음 디스 어셈블 된 코드를 패치합니다. 패치 된 코드를 새로운 버전의 응용 프로그램으로 "재조합"합니다.

+0

친절한 설명을 해주셔서 대단히 감사합니다. 내 문제는 xdelta가 여러 실험을 거쳐 선택됩니다. – tianyapiaozi

5

시도 xdelta.

LVM이 아직 스냅 샷의 스냅 샷을 지원하지 않기 때문에 매우 큰 파일 (하나의 LVM 논리 볼륨과 스냅 샷)을위한 바이너리 diff 도구를 찾고 있었으며 xdelta가 유용합니다.